当前位置: 首页 > news >正文

RabbitMq实现延迟队列功能

1、rabbitmq服务端打开延迟插件 (超过 4294967295毫秒 ≈ 1193 小时 ≈ 49.7 天  这个时间会立即触发)

注意:只有RabbitMQ 3.6.x以上才支持

在下载好之后,解压得到.ez结尾的插件包,将其复制到RabbitMQ安装目录下的plugins文件夹。

然后通过命令行启用该插件:

rabbitmq-plugins enable rabbitmq_delayed_message_exchange

该插件在通过上述命令启用后就可以直接使用,不需要重启。

2、添加依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency>

3、配置交换机和队列

@Configuration
public class DelayedConfig {public static String EXCHANGE_NAME = "delayed_exchange";public static String QUEUE_NAME = "delayed_queue";public static String KEY_NAME = "delayed_key";/*** 基于插件实现的交换机,必须是CustomExchange类型,标识这是一个延时类型的交换机*/@Bean()public CustomExchange delayedExchange(){Map<String,Object> params = new HashMap<>();params.put("x-delayed-type","direct");//参数1:交换机名字,参数2:交换机的类型,参数3:是否持久化,参数4:是否自动删除队列,参数5:交换机的额外参数设置return new CustomExchange(EXCHANGE_NAME,"x-delayed-message",true,false,params);}@Bean()public Queue delayedQueue(){return new Queue(QUEUE_NAME);}@Beanpublic Binding delayedBinding(){return BindingBuilder.bind(delayedQueue()).to(delayedExchange()).with(KEY_NAME).noargs();}}

 4、发送和接收消息

@GetMapping("/t5")public void t5(){Date date = new Date();System.out.println("发送时间:" + date.toString());//发送消息rabbitTemplate.convertAndSend(DelayedConfig.EXCHANGE_NAME,DelayedConfig.KEY_NAME,"1延迟消息wxm",msg->{msg.getMessageProperties().setHeader(MessageProperties.X_DELAY, 15552000000L);msg.getMessageProperties().setDeliveryMode(MessageDeliveryMode.PERSISTENT);return msg;});//发送消息rabbitTemplate.convertAndSend(DelayedConfig.EXCHANGE_NAME,DelayedConfig.KEY_NAME,"延迟消息wxm",msg->{msg.getMessageProperties().setDelay(10000);msg.getMessageProperties().setDeliveryMode(MessageDeliveryMode.PERSISTENT);return msg;});log.info("发送成功");}@RabbitHandler@RabbitListener(queues = "delayed_queue")public void getDelayed(Message message, Channel channel) throws Exception{Date date = new Date();String rightNow = date.toString();String msg = new String(message.getBody());// 手动应答System.out.println(message.getMessageProperties().getDeliveryTag());channel.basicAck(message.getMessageProperties().getDeliveryTag(), true);System.out.println("接受成功:"+msg+rightNow);}

http://www.lryc.cn/news/429968.html

相关文章:

  • redis内存淘汰策略
  • 实时洞察应用健康:使用Spring Boot集成Prometheus和Grafana
  • 生信圆桌x生信豆芽菜:生物信息学新手的学习与成长平台
  • 创客匠人标杆对话(上):她如何通过“特长+赛道”实现财富升级
  • 最少钱学习并构建大模型ollama-llama3 8B
  • AVI视频损坏了怎么修复?轻松几步解决你的困扰
  • 【C++】map、set基本用法
  • 模型 闭环原理
  • 3007. 价值和小于等于 K 的最大数字(24.8.21)
  • 微服务 - 分布式锁的实现与处理策略
  • Catf1ag CTF Web(九)
  • QT QFileDialog 类
  • 了解 K-Means 聚类的工作原理(详细指南)
  • 预警先行,弯道哨兵让行车更安全
  • 预约咨询小程序搭建开发,uniapp前端,PHP语言开发
  • 极速文件预览!轻松部署 kkFileView 于 Docker 中!
  • 某验九宫格分类识别
  • 未来展望:观测云技术的发展与企业业务的融合
  • day6JS-DOM(文档对象模型)
  • MySQL列表分区分区表
  • qt打包程序方法(非常好用)
  • IP地址管理:优化网络布局与提升效率
  • 老古董Lisp实用主义入门教程(5):好奇先生用Lisp探索Lisp
  • linux文件——用户缓冲区——概念深度理解、IO模拟实现
  • Selenium模拟鼠标滚动页面:实现自动化测试中的页面交互
  • Eureka原理与实践:构建高效的微服务架构
  • OpenJDK 和 OracleJDK 的区别、下载方式
  • arthas源码刨析:arthas-core (2)
  • 【分享】格力手机色界G0245D 刷REC、root、 救砖、第三方rom教程和资源
  • 开学必备清单来啦!大学好物合集推荐!每一个都能帮你提升幸福感