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

关于设置rocketmq的timerMaxDelaySec时间问题

brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerIP1 = 10.10.10.9
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
messageDelayLevel = 1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h 4h 5h
enablePropertyFilter = true
timerMaxDelaySec=2592000

这是我目前的配置,单节点,客户端在访问的时候会产生一个错误,如下图

Caused by: org.apache.rocketmq.client.exception.MQBrokerException: CODE: 13  DESC: timer message illegal, the delay time should not be bigger than the max delay -1702967296ms; or if set del msg, the delay time should be bigger than the current time BROKER: 10.10.10.9:10911
For more information, please visit the url, http://rocketmq.apache.org/docs/faq/
    at org.apache.rocketmq.client.impl.MQClientAPIImpl.processSendResponse(MQClientAPIImpl.java:779) ~[rocketmq-client-5.0.0.jar!/:5.0.0]
    at org.apache.rocketmq.client.impl.MQClientAPIImpl.sendMessageSync(MQClientAPIImpl.java:619) ~[rocketmq-client-5.0.0.jar!/:5.0.0]
    at org.apache.rocketmq.client.impl.MQClientAPIImpl.sendMessage(MQClientAPIImpl.java:601) ~[rocketmq-client-5.0.0.jar!/:5.0.0]
    at org.apache.rocketmq.client.impl.MQClientAPIImpl.sendMessage(MQClientAPIImpl.java:545) ~[rocketmq-client-5.0.0.jar!/:5.0.0]
    at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.sendKernelImpl(DefaultMQProducerImpl.java:907) ~[rocketmq-client-5.0.0.jar!/:5.0.0]
    at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.sendDefaultImpl(DefaultMQProducerImpl.java:643) ~[rocketmq-client-5.0.0.jar!/:5.0.0]
    at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:1426) ~[rocketmq-client-5.0.0.jar!/:5.0.0]
    at org.apache.rocketmq.client.producer.DefaultMQProducer.send(DefaultMQProducer.java:370) ~[rocketmq-client-5.0.0.jar!/:5.0.0]
    at org.apache.rocketmq.spring.core.RocketMQTemplate.syncSend(RocketMQTemplate.java:654) ~[rocketmq-spring-boot-2.2.3.jar!/:2.2.3]

消息最大时间是不能自定义设置超过3天以上吗?还是我的配置内容缺少了,有没有大佬帮我解答下

展开
收起
游客nacooayte2vie 2023-11-16 17:07:00 232 0
5 条回答
写回答
取消 提交回答
  • 根据你的错误消息,问题可能在于你设置的 timerMaxDelaySec 参数超过了允许的最大值。RocketMQ 默认允许的最大延迟时间为 3 天(2592000 毫秒)。如果你尝试设置一个大于这个值的延时时间,就会出现上述错误。

    在你的配置中,你已经将 timerMaxDelaySec 设置为 2592000,这是允许的最大值。然而,你提供的错误消息似乎表明客户端正在尝试发送一个比这个最大值还要大的延时消息,因此导致了错误。

    为了修复这个问题,请确保你的客户端代码没有试图发送超过 3 天延时的消息。你可以检查你的客户端代码,并确认它是否正确地使用了你在服务器端设置的 messageDelayLevel 参数来限制消息的最大延迟时间。

    例如,如果 messageDelayLevel 设置为 1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h 4h 5h,那么客户端应该只能发送在这个范围内延迟的消息,而不是超过 3 天的延时消息。

    2023-11-30 23:02:49
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    在 RocketMQ 中,timerMaxDelaySec 是一个重要的参数,它用于设置消息延迟定时器的最大延迟时间。默认情况下,该参数的值为 24 小时。
    如果要更改 timerMaxDelaySec 参数的值,需要编辑 broker.conf 文件,并将 timerMaxDelaySec 参数的值设置为您想要的值。该文件位于 RocketMQ 的 conf 目录中。以下是一个示例配置:

    # 设置消息延迟定时器的最大延迟时间(单位:秒)
    timerMaxDelaySec=86400
    
    2023-11-17 13:58:15
    赞同 展开评论 打赏
  • 是的,RocketMQ的消息最大延迟时间不能超过3天。在你的配置中,timerMaxDelaySec的值设置为2592000秒(约3天),这是正确的。如果你想要设置更长的延迟时间,可以考虑使用其他类型的消息,如定时任务或延时消息。

    2023-11-17 12:05:42
    赞同 展开评论 打赏
  • 从你给出的错误信息来看,问题可能出在你的 timerMaxDelaySec 配置上。timerMaxDelaySec 是用于控制定时消息的最大延迟时间,单位为秒。默认值是 86400(一天),而你设置的值为 2592000(一个月),这超出了 RocketMQ 的最大延迟时间限制。

    RocketMQ 的 messageDelayLevel 参数可以设置不同的延迟级别,但最大的延迟时间不能超过 -1702967296ms(约等于 1342172800 秒,即 13 天)。

    如果你确实需要发送延迟超过 13 天的消息,你需要对 RocketMQ 的源代码进行修改,增加 timerMaxDelaySec 的最大值。但这可能会导致其他未知的问题,因此不建议这样做。

    如果你只是想在短时间内测试一下大延迟的消息,你可以尝试减少 timerMaxDelaySec 的值,或者使用 messageDelayLevel 参数来设置更小的延迟级别。

    2023-11-17 09:07:24
    赞同 展开评论 打赏
  • 在github上找到如下答案
    https://github.com/apache/rocketmq/issues/5376
    试试看

    2023-11-16 18:49:26
    赞同 展开评论 打赏

多个子产品线联合打造金融级高可用消息服务以及对物联网的原生支持,覆盖多行业。

相关产品

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

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