RabbitMQ实现延迟队列有两种方式,一个是利用‘死信’队列,一种是利用RabbitMQ第三方插件库rabbitmq_recent_history_exchange,这个文章是笔记一下rabbitmq_recent_history_exchange
下载后解压,放到RabbitMQ的Plugins目录下,使用命令rabbitmq-plugins enable rabbitmq_delayed_message_exchang启用插件
代码
生成者
@Autowired
private RabbitTemplate rabbitTemplate;
//省略。。。。。。。
rabbitTemplate.convertAndSend("delay.exchange","delay.massage",System.currentTimeMillis()+"",message -> {
//其原理是通过Exchange来实现延迟功能,即在Exchange中根据各个message的x-delay头设置延迟时间,时间到达后才发送到对应的queue,进而被queue消费
// 注意这里时间可以使long,而且是设置header, key=x-delay,死的,就这样写
message.getMessageProperties().setHeader("x-delay", 6000);
return message;
});
消费者
@Component
@RabbitListener(queues = "delay")
public class Consumer1 {
@RabbitHandler
public void sendMassage(String msg) {
System.out.println(msg);
Long result = System.currentTimeMillis() - Long.parseLong(msg);
System.out.println("间隔:" + result/1000);
// System.out.println(msg);
}
}
MQ配置,你也可以用代码构建
JsonUtil.fromJson("json数据",xxx.class);