RocketMQ 延时级别配置

RocketMQ 支持定时消息,但是不支持任意时间精度,仅支持特定的 level,例如定时 5s, 10s, 1m 等。其中,level=0 级表示不延时,level=1 表示 1 级延时,level=2 表示 2 级延时,以此类推。

如何配置:

在服务器端(rocketmq-broker端)的属性配置文件中加入以下行:

messageDelayLevel=1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h 
描述了各级别与延时时间的对应映射关系。

     这个配置项配置了从1级开始各级延时的时间,如1表示延时1s,2表示延时5s,14表示延时10m,可以修改这个指定级别的延时时间; 
     时间单位支持:s、m、h、d,分别表示秒、分、时、天; 
     默认值就是上面声明的,可手工调整; 
     默认值已经够用,不建议调整【仅供参考,还是根据实际需要调整。调整默认值时注意同时要修改时间对应的level级别的值】 

 
如何发送延时消息:

发送延时消息只需要在客户端(rocketmq-client端)待发送的消息( com.alibaba.rocketmq.common.message.Message )中设置延时级别delayLevel即可。

Message msg = new Message(topicName,"",keys,message.getBytes());

msg.setDelayTimeLevel(delayLevel);

SendResult sendResult = getMQProducer.send(msg);


### 如何在 RocketMQ 中实现和配置延时消息队列 #### 配置环境与引入依赖 为了使用 RocketMQ 实现延时消息,在项目中需先正确设置开发环境并引入必要的客户端库。对于 Maven 构建工具管理下的 Java 应用程序来说,应当添加如下所示的 `pom.xml` 文件内的依赖项来集成 RocketMQ 客户端[^3]。 ```xml <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-client</artifactId> <version>4.9.0</version> </dependency> ``` #### 发送延时消息的方法 当准备就绪之后,可以通过调用 RocketMQ 提供的相关 API 来发送带有特定延迟等级的消息。下面是一个简单的 Python 脚本例子展示怎样向指定主题发布一条将在一段时间后被消费处理的信息: ```python from rocketmq.client import PushConsumer, MessageQueue, SendStatus, Producer producer = Producer('test_producer_group') producer.set_namesrv_addr('localhost:9876') # 设置NameServer地址 producer.start() msg = producer.create_message('TopicTest', 'TagA', b'Hello RocketMQ Delayed Message!') # 设定消息级别LEVEL_1 ,即大约等待5秒后再投递给消费者 msg.set_delay_time_level(1) ret = producer.send(msg) if ret.status != SendStatus.OK: print(f"Failed to send message {ret}") else: print("Message sent successfully") producer.shutdown() ``` 此代码片段展示了如何利用官方提供的 SDK 创建生产者实例,并通过设定消息属性中的延迟级别参数(`set_delay_time_level()` 方法),从而达到控制消息实际送达时间的效果。需要注意的是,这里使用的延迟等级是从预定义的时间间隔列表选取出来的;具体数值取决于服务器端配置,默认情况下有多个可选项可供选择,如几秒钟至数小时不等[^1]。 #### 接收延时消息的方式 接收方同样需要构建相应的消费者逻辑以监听目标 Topic 并处理收到的数据包。由于 RocketMQ 支持多种编程语言接口,因此可以根据实际情况选用合适的 SDK 开展工作。以下是采用 Python 编写的简单示例用于订阅含有延时特性的消息流: ```python consumer = PushConsumer('test_consumer_group') consumer.set_namesrv_addr('localhost:9876') def callback(msg): if msg.reconsume_times == 0: print(f"Received delayed message: {str(msg.body)}") consumer.ack(msg) consumer.subscribe('TopicTest', '*', callback=callback) consumer.start() try: while True: pass except KeyboardInterrupt: consumer.shutdown() ``` 这段脚本说明了如何注册回调函数去响应来自特定主题的新到达的通知,其中包含了对初次接收到的消息进行打印输出的操作。此外还实现了基本的心跳保持机制确保长时间运行期间不会意外断开连接[^2]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值