• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

rabbitmq-delay: rabbitmq实现延时消息的两种方式

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

rabbitmq-delay

开源软件地址:

https://gitee.com/viturefree/rabbitmq-delay

开源软件介绍:

Rabbitmq Delay Message

Rabbitmq实现延时消息的两种方式

1、使用队列的ttl特性【延时队列】

使用队列的ttl特性,即配置死信队列的消息重新路由到消费队列中,同一个队列的消息过期时间将相同,即使消息本身可能带上了ttl,同样会因队头的消息未过期而无法消费;

关键配置说明

spring:  cloud:    stream:      bindings:        input:          destination: delay_message_queue_input          group: test-service        output:          destination: delay_message_queue_output          producer:            required-groups: test-service      rabbit:        bindings:          input:            consumer:              exchangeType: direct          output:            producer:              ttl: 3000              autoBindDlq: true              deadLetterExchange: delay_message_queue_input              deadLetterQueueName: delay_message_queue_input.test-service

定义两个队列delay_message_queue_outputdelay_message_queue_input,并将delay_message_queue_output声明为延时队列,设定队列的ttl3000ms,deadLetterExchange及deadLetterQueueName表示若消息过期将转发至此交换机。

2、使用延时插件实现【延时交换机】

使用延时交换机实现延时消息更加灵活,可以针对每个消息设置任意的过期时间,交换机中的消息如果过期将路由到绑定的队列中进行消费;

关键配置说明

spring:  cloud:    stream:      bindings:        input:          destination: delay_message_exchange          group: test-service        output:          destination: delay_message_exchange      rabbit:        bindings:          input:            consumer:              delayed-exchange: true          output:            producer:              delayed-exchange: true

定义两个队列并声明为延时exchnagedelayed-exchangerabbitmq延时插件支持,在发送消息时带上x-delay参数指定过期时间;

    public void sendDelayExchangeMessage(String message) {        log.info("send message {}", message);        processor.output().send(MessageBuilder.withPayload(message).setHeader("x-delay",20000).build());    }

3、两种实现方式比较

延时队列

mvn clean compile exec:exec -Dexec.executable="java" -Dexec.args="-cp %classpath com.hugesoft.Application  --spring.rabbitmq.host=192.168.88.100 --spring.profiles.active=queue

delay-queue

延时交换机

mvn clean compile exec:exec -Dexec.executable="java" -Dexec.args="-cp %classpath com.hugesoft.Application  --spring.rabbitmq.host=192.168.88.100 --spring.profiles.active=exchange"

delay-exchange

使用队列的方式只能用于所有消息的过期时间均相同的情况下,延时中的消息总数可以延时队列中查看到,使用交换机插件的方式更加灵活,可以针对每个消息设置不同的超时,适应更多的业务场景,延时中的消息总数可以延时的交换机中查看到;

赞赏(Donation)

微信(Wechat Pay)

donation-wechatpay


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap