背景
文章插图
普通消息队列 , 消息一旦入队就会被消费者立刻消费,而延迟队列则需要指定固定时间后被延迟消费.
Docker安装rabbitMq延迟队列插件版本学习的话可以去官网下载rabbitmq并通过安装插件的方式安装延迟队列 插件地址:
https://www.rabbitmq.com/community-plugins.html
但我们这里使用现成的镜像就可以简单学习
docker镜像下载,使用docker-compose编排运行【docker版本rabbitMq延迟队列】docker pull lianlianyi/rabbitmq
rabbitmq:image: lianlianyi/rabbitmq:3.9.13-management-alpine-delayedports:- 15672:15672- 5672:5672environment:- TIME_ZONE=Asia/Shanghai#用户- RABBITMQ_DEFAULT_USER=admin#密码- RABBITMQ_DEFAULT_PASS=adminvolumes:- /etc/localtime:/etc/localtime- /etc/timezone:/etc/timezone- ./data/rabbitmq/db:/var/lib/rabbitmq/mnesia/rabbit@my-rabbit
启动验证交换机有出现 x-delayed-message 字样表示插件运行成功文章插图
springboot 对接rabbitmq队列
- 添加依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency>
2.Application.xmlrabbitmq:host: 127.0.0.1port: 5672username: adminpassword: adminvirtual-host: /publisher-returns: true #开启发送失败返回publisher-confirm-type: correlated #配置确认回调listener:simple:acknowledge-mode: auto #开启ackconcurrency: 5 #指定最小的消费者数量.max-concurrency: 10 #指定最大的消费者数量.prefetch: 1 # 最多一次消费多少条数据 -限流direct:acknowledge-mode: auto#支持消息的确认与返回template:mandatory: true
生产者伪代码rabbitTemplate.convertAndSend(DELAYED_EXCHANGE_NAME, DELAYED_ROUTING_KEY, msg, correlationDate -> {//延迟3秒correlationDate.getMessageProperties().setDelay(1000 * 3);return correlationDate;});log.info("生产者发送时间:{},msg:{}", DateUtil.formatDateTime(new Date()),msg);
消费者伪代码@RabbitListener(queuesToDeclare = @Queue(MsgProduct.DELAYED_QUEUE_NAME))public void receive(@Payload MsgDemo msgDemo, Message message, Channel channel) {log.info("调用消费者时间:{},MSG:{}¨", DateUtil.formatDateTime(new Date()),msgDemo);}
文章插图
本文涉及到的demohttps://github.com/lianlianyi/toutiao_demo
推荐阅读
- 中国八大菩萨是谁?
- docker容器与传统虚拟机对比
- 12 个优化 Docker 镜像安全性的技巧
- QQ 重磅功能更新,但我更希望下次版本取消
- RabbitMQ的安装图解
- Docker容器监控:cAdvisor+InfluxDB+Grafana
- G5 阿里云ECS服务器安装配置docker
- Docker安装mysql5.7.37主从
- Thinkphp最新版本漏洞分析
- 如何在 Linux 中清理 Snap 包的版本