RocketMQ延迟消息

生产者把消息发送到消息队列中以后,并不期望被立即消费,而是等待指定时间后才可以被消费者消费,这类消息通常被称为延迟消息。

在RocketMQ中,支持延迟消息,但是不支持任意时间精度的延迟消息,只支持特定级别的延迟消息。如果要支持任意时间精度,不能避免在Broker层面做消息排序,再涉及到持久化的考量,那么消息排序就不可避免产生巨大的性能开销。

消息延迟级别如下:

messageDelayLevel=1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h

共18个级别。在发送消息时,设置消息延迟级别即可,设置消息延迟级别时有以下3种情况:
1、设置消息延迟级别等于0时,则该消息为非延迟消息。
2、设置消息延迟级别大于等于1并且小于等于18时,消息延迟特定时间。
3、设置消息延迟级别大于18时,则该消息延迟级别为18h。

配置
为了使延迟消息生效,还需要添加队列的异步配置如下:

spring:
  cloud:
    stream:
      rocketmq:
        binder:
          # rocketmq 服务器地址
          name-server: 192.168.0.180:9876
        bindings:
          # 队列延迟开启
          test-mq-output:
            producer:
              sync: true
      bindings:
        # 绑定队列
        test-mq-output:
          destination: test-mq-topic
          group: test-mq-group
        mcc-sms-passage-input:
          destination: test-mq-topic
          group: test-mq-group
          consumer:
            #多线程
            concurrency: 20
            #重试1次
            maxAttempts: 2

配置好以后,在发送消息至MQ时设置延迟级别就可以了。

Message msg=new Message();
	msg.setTopic("TopicA");
	msg.setTags("Tag");
	msg.setBody("this is a delay message".getBytes());
	//设置延迟level为5,对应延迟1分钟
	msg.setDelayTimeLevel(5);
producer.send(msg);

MQ的流程图如下
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值