c语言sscanf函数的用法是什么
284
2022-10-19
Docker下RabbitMQ延时队列实战两部曲之一:极速体验
欢迎访问我的GitHub
关于延时队列
有的应用场景中,向RabbitMQ发出消息后,我们希望消费方不要立即消费,可以通过延时队列来实现,思路是将消息发送到A队列,此队列没有消费者,等消息过期后会进入A队列的Dead Letter Exchange中,B队列绑定了这个Dead Letter Exchange,消费方只要消费B队列的消息,就能实现延时消费了,如下图所示:
延时的时长
从上面的描述可以看出,延时时长就是消息的过期时间TTL(Time To Live),这个参数可以通过以下两种方式设置: 生产消息时,设置该消息的TTL; 设置整个队列的TTL,队列中每个消息的TTL都是一样的; 接下来的实战,我们将上述两种方式都体验一次;
环境信息
操作系统:Ubuntu 16.04.3 LTS Docker:1.12.6 RabbitMQ:3.7.5-rc.1
极速体验
名称 | 作用 | 备注 |
---|---|---|
delaymq_rabbit1_1 | 一号RabbitMQ | 管理页面:192.168.31.102:15672 |
delaymq_rabbit2_1 | 二号RabbitMQ | 管理页面:192.168.31.102:15673 |
delaymq_rabbit3_1 | 三号RabbitMQ | 管理页面:192.168.31.102:15675 |
delaymq_messagettlproducer_1 | 消息生产者 | 每条消息中都带了TTL |
delaymq_queuettlproducer_1 | 消息生产者 | 消息中不带TTL,消息队列设置了TTL |
delaymq_delayrabbitmqconsumer_1 | 消息消费者 | 同时消费上述两个队列的消息 |
我的电脑IP地址是192.168.31.102,因此在浏览器输入:,可以进入RabbitMQ的登录页面,如下图:
登录用户名:admin,密码:888888,登录后页面如下图,可以见到RabbitMQ集群已经就绪:
如果您的页面中的三个RabbitMQ还没有完全就绪(绿色状态),建议稍等几分钟后再刷新页面; 我的电脑IP地址是192.168.31.102,因此在浏览器输入:,即可向delaymq_messagettlproducer_1容器发起一次请求,容器会发送一条带有TTL的消息,然后页面提示发送成功,如下图:
在浏览器输入:,即可向delaymq_queuettlproducer_1容器发起一次请求,容器会向一个已经设置了TTL的队列发送一条消息,然后页面提示发送成功,如下图:
再次进入RabbitMQ管理页面,查看队列情况如下图,已经有四个队列了:
用下列表格对上述四个队列简单说明:
名称 | 作用 | 备注 |
---|---|---|
message.ttl.queue.source | 生产者发送消息到此 | 这里面的消息都带有TTL |
message.ttl.queue.process | Dead Letter Exchange将过期消息转发到此 | 这里都是message.ttl.queue.source的过期消息 |
queue.ttl.queue.source | 生产者发送消息到此 | 这里面的消息都不带TTL,这个队列自己有TTL |
queue.ttl.queue.process | Dead Letter Exchange将过期消息转发到此 | 这里都是queue.ttl.queue.source的过期消息 |
容器delaymq_delayrabbitmqconsumer_1中的tomcat在启动时候,由于此时队列还没创建,因此无法连接队列,会导致tomcat启动失败,进而导致容器退出(因为tomcat进程占据了控制台,它退出容器就会退出),此时请执行docker restart delaymq_delayrabbitmqconsumer_1重启容器; 重启后,执行命令docker logs -f delaymq_delayrabbitmqconsumer_1,开始实时打印消费者容器的日志,可以看到SpringBoot刚刚启动就把之前的两条消息给消费了,如下图红框所示:
在浏览器输入:,url中的10表示延时十秒,去看delaymq_delayrabbitmqconsumer_1的日志,果然,10秒钟后日志才会打印出来,如下所示,消息中的时间和日志的时间戳相差10秒:
2018-06-09 07:13:25.878 INFO 1 --- [cTaskExecutor-1] c.b.d.receiver.MessageTtlReceiver : receive message : hello, aaa01 , bbb01, from queue [message.ttl.queue.source], delay 10's, 2018-06-09 07:13:15
在浏览器输入:,会发送消息到队列queue.ttl.queue.source,这个队列的TTL是5秒,在delaymq_delayrabbitmqconsumer_1的日志中可以看见发起和收到时间正好差5秒,如下:
2018-06-09 07:31:05.101 INFO 1 --- [cTaskExecutor-1] c.b.d.receiver.QueueTtlReceiver : receive message : hello, ccc01 , ddd01, from queue [queue.ttl.queue.source], 2018-06-09 07:31:00
至此,咱们的极速体验延时队列实战就结束了,接下来的章节,我们一起实战详细的开发过程《Docker下RabbitMQ延时队列实战两部曲之二:细说开发》
欢迎关注51CTO博客:程序员欣宸
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~