开发者社区 > 云原生 > 云消息队列 > 正文

RocketMQ如何自定义延时消息时间?

RocketMQ如何自定义延时消息时间?

展开
收起
嘟嘟嘟嘟嘟嘟 2024-08-28 08:12:42 588 0
2 条回答
写回答
取消 提交回答
  • 在RocketMQ中自定义延时消息时间,您需要遵循以下步骤操作,并注意相关细节:

    1. 确保主题支持延时消息
      首先,确保您的消息主题支持延时消息功能。您可以通过更新主题属性来实现,设置message.type为DELAY。使用命令行工具mqadmin进行配置,例如:
      sh mqadmin updateTopic -n -t -c -a +message.type=DELAY
      这里 是Nameserver地址, 是您的主题名, 是集群名称。
    2. 设置消息的延时时间戳
      在发送消息时,需要指定消息的延时时间。延时时间不是一段时长,而是具体的Unix时间戳,表示消息何时应当被投递。您需要将期望的投递时间转换成Unix时间戳格式(毫秒级别)。例如,如果您希望消息在一个小时后被投递,您需要计算当前时间加上一个小时的时间戳。
      实现步骤
      Java示例代码
      假设您正在使用Java客户端发送消息,您需要使用Message类的构造函数或相关方法设置StartDeliverTime属性,这个属性就是消息的预定投递时间戳。以下是一个简单的示例:
      import org.apache.rocketmq.common.message.Message;
      import java.util.concurrent.TimeUnit;
      // 获取当前时间并增加1小时的毫秒数
      long delayTime = System.currentTimeMillis() + TimeUnit.HOURS.toMillis(1);
      // 创建消息实例
      Message message = new Message("DelayTopic", // 主题
      "TagA", // 标签
      "KeyA", // 消息键
      ("Hello RocketMQ Delay Message").getBytes(RemotingHelper.DEFAULT_CHARSET)); // 消息体
      // 设置消息的延时时间戳
      message.setStartDeliverTime(delayTime);
      // 发送消息
      SendResult sendResult = defaultMQProducer.send(message);
    3. 注意事项

    定时精度:尽管RocketMQ支持毫秒级的定时时间设置,但默认精度为1秒。这意味着实际触发时间可能会有±1秒的误差。
    定时范围:确保设置的延时时间在有效范围内,最大延时时间默认为24小时。
    避免高峰:尽量避免大量消息设置为同一时刻投递,以免造成瞬时处理压力过大。此回答整理自钉群“群2-Apache RocketMQ 中国开发者钉钉群”

    2024-08-28 10:44:35
    赞同 117 展开评论 打赏
  • 定时时间设置原则
    云消息队列 RocketMQ 版定时消息设置的定时时间是一个预期触发的系统时间戳,延时时间也需要转换成当前系统时间后的某一个时间戳,而不是一段延时时长。

    定时时间的格式为毫秒级的Unix时间戳,您需要将要设置的时刻转换成时间戳形式。

    定时时间必须设置在定时时长范围内,超过范围则定时不生效,服务端会立即投递消息。

    定时消息最大定时时长:

    包年包月、按量付费标准版,Serverless标准版与专业版最大支持7天。

    包年包月、按量付费专业版,铂金版最大支持40天。

    定时时间必须设置为当前时间之后,若设置到当前时间之前,则定时不生效,服务端会立即投递消息。

    示例如下:

    定时消息:例如,当前系统时间为2022-06-09 17:30:00,您希望消息在下午19:20:00定时投递,则定时时间为2022-06-09 19:20:00,转换成时间戳格式为1654773600000。

    延时消息:例如,当前系统时间为2022-06-09 17:30:00,您希望延时1个小时后投递消息,则您需要根据当前时间和延时时长换算成定时时刻,即消息投递时间为2022-06-09 18:30:00,转换为时间戳格式为1654770600000。

    image.png
    参考文档https://help.aliyun.com/zh/apsaramq-for-rocketmq/cloud-message-queue-rocketmq-5-x-series/developer-reference/scheduled-and-delayed-messages?spm=a2c4g.11186623.0.i29

    2024-08-28 09:08:11
    赞同 111 展开评论 打赏

涵盖 RocketMQ、Kafka、RabbitMQ、MQTT、轻量消息队列(原MNS) 的消息队列产品体系,全系产品 Serverless 化。RocketMQ 一站式学习:https://rocketmq.io/

相关产品

  • 云消息队列 MQ
  • 相关电子书

    更多
    RocketMQ Client-GO 介绍 立即下载
    RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 立即下载
    基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 立即下载