您好,请问现在在5.0+版本中支持了任意时刻的定时发布功能,我看到官方文档上写了最长支持定时时间是24小时,可是我看有其他的地方写的是没有这个限制,请问有人知道详细的问题么
定时消息是云消息队列 RocketMQ 版提供的一种高级消息类型,消息被发送至服务端后,在指定时间后才能被消费者消费。通过设置一定的定时时间可以实现分布式场景的延时调度触发效果。
定时时间设置原则
云消息队列 RocketMQ 版定时消息设置的定时时间是一个预期触发的系统时间戳,延时时间也需要转换成当前系统时间后的某一个时间戳,而不是一段延时时长。
定时时间的格式为毫秒级的Unix时间戳,您需要将要设置的时刻转换成时间戳形式。具体方式,请参见Unix时间戳转换工具。
定时时间必须设置在定时时长范围内,超过范围则定时不生效,服务端会立即投递消息。
定时时长最大值默认为24小时,不支持自定义修改,更多信息,请参见参数限制。
定时时间必须设置为当前时间之后,若设置到当前时间之前,则定时不生效,服务端会立即投递消息。
示例如下:
定时消息:例如,当前系统时间为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。
定时消息的实现逻辑需要先经过定时存储等待触发,定时时间到达后才会被投递给消费者。因此,如果将大量定时消息的定时时间设置为同一时刻,则到达该时刻后会有大量消息同时需要被处理,会造成系统压力过大,导致消息分发延迟,影响定时精度。
你好,官方文档写的是默认24小时,特殊需求,可提交工单申请延长至7天,主要是考虑超长定时参数会给系统带来稳定性风险,建议定时时长不要设置过长。
在RocketMQ 5.0+版本中,确实支持了任意时刻的定时发布功能,但是官方文档中提到的最长支持定时时间是24小时,这是因为在实际应用中,如果定时发布的时间间隔过长,会对消息的实时性产生影响,同时也会增加系统的负担。
RocketMQ是阿里巴巴开源的一款分布式消息中间件,设计之初就是为大规模消息处理而设计,具有高可用、高并发、可扩展等特性。
关于RocketMQ的定时发送问题,RocketMQ的Producer提供了sendDelay方法,可以设置延迟一定时间后发送消息。
示例代码如下:
```DefaultMQProducer producer = new DefaultMQProducer("ProducerGroupName");
producer.setNamesrvAddr("127.0.0.1:9876");
producer.start();
Message msg = new Message("TopicTest", "TagA", "OrderID001", "Hello RocketMQ".getBytes(RemotingHelper.DEFAULT_CHARSET));
/**
SendResult sendResult = producer.send(msg);
System.out.println(sendResult);
producer.shutdown();
```
在这段代码中,我们设置了消息的延迟时间为10秒。msg.setDelayTimeLevel(3)这行代码就是设置延迟时间的关键,其中3表示10秒。RocketMQ预定义了6个延迟级别,分别是:
需要注意的是,RocketMQ的延迟消息并不能保证在指定时间后立即发送,而是在设置的级别时间后开始发送。例如,如果设置为Level=3,则会在10秒后开始发送,但具体何时发送成功还需要看Broker的处理情况。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。