基于RabbltMQ延迟插件实现延迟队列代码示例
2024-08-31 09:10:31
上一篇文章写了docker安装RabbitMQ及延迟插件的安装,这篇的话是基于RabbitMQ延迟插件实现延迟队列的示例
那么废话不多说 直接上代码!!
首先创建延迟队列配置类 DelayedQueueConfig
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.CustomExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.HashMap;
import java.util.Map;
@Configuration
public class DelayedQueueConfig {
//交换机
public static final String DELAYED_EXCHANGE_NAME = "delayed.exchange";
//队列
public static final String DELAYED_QUEUE_NAME = "delayed.queue";
//routingkey
public static final String DELAYED_ROUTING_KEY = "delayed.routingkey";
//声明交换机
@Bean
public CustomExchange delayedExchange() {
Map<String, Object> arguments = new HashMap<>();
//设置延迟交换机为直接类型
arguments.put("x-delayed-type", "direct");
/**
* 参数说明
* 1.交换机名字
* 2.交换机类型
* 3.是否持久化
* 4.是否自动删除
* 5.其他参数
*/
return new CustomExchange(DELAYED_EXCHANGE_NAME, "x-delayed-message", true, false, arguments);
}
//声明队列
@Bean
public Queue delayedQueue() {
return new Queue(DELAYED_QUEUE_NAME);
}
//绑定
@Bean
public Binding delayedQueueBindingdelayedExchange(
@Qualifier("delayedQueue") Queue delayedQueue,
@Qualifier("delayedExchange") CustomExchange delayedExchange) {
return BindingBuilder.bind(delayedQueue).to(delayedExchange).with(DELAYED_ROUTING_KEY).noargs();
}
}
接着编写生产者代码
//基于插件发送延迟消息
@GetMapping("/senddelayedMsg/{message}/{delayedTime}")
public void sendMsg(@PathVariable String message, @PathVariable Integer delayedTime) {
log.info("当前时间:{},发送一条时长{}毫秒给延迟队列delayed.queue:{}", new Date().toString(), delayedTime, message);
/**
* convertAndSend 方法参数说明
* 1.交换机名称
* 2.routingkey
* 3.发送的消息
* 4.发送完消息后的回调
*/
rabbitTemplate.convertAndSend(DELAYED_EXCHANGE_NAME, DELAYED_ROUTING_KEY, message, msg -> {
msg.getMessageProperties().setDelay(delayedTime);
return msg;
});
}
最后编写消费者代码
import com.zfd.config.DelayedQueueConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import java.util.Date;
@Slf4j
@Component
public class DelayedqueueConsumer {
@RabbitListener(queues = DelayedQueueConfig.DELAYED_QUEUE_NAME)
public void receiveDelayQueue(Message message) {
String msg = new String(message.getBody());
log.info("当前时间:{},收到延迟队列的消息:{}", new Date().toString(), msg);
}
}
接着运行程序 发送请求
到这里我们基于插件实现RabbitMQ延迟队列就写完了!!
最新文章
- C语言 独木舟问题
- nested exception is org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element &#39;beans&#39;.
- Caffe学习系列(15):计算图片数据的均值
- linux包之nc之nc命令
- hdu2021(很闲~~)
- java service
- Node.js权威指南 (5) - 使用Buffer类处理二进制数据
- url 的httppost 和http get ,put,delect
- win32 清空ListBox所有内容
- Egret初体验–躲避类小游戏
- JAVA函数的参数传递
- Ping pong(树状数组求序列中比某个位置上的数小的数字个数)
- Apache日志分析_shell命令行
- 数组的迭代方法(every、filter、forEach、map、some)
- python读取导出数据
- jenkins登录后页面显示为空的问题
- mecacheq的配置
- 内存或磁盘空间不足 Microsoft Excel无法再次打开解决方法
- BZOJ4517[Scoi2016]美味——主席树
- j2ee分布式缓存同步实现方案dlcache