Apache RocketMQ中我测试ons的时候, 发送半消息, 发现超过20s后, 再提交这个?[阿里云消息队列MQ]

Apache RocketMQ中我测试ons的时候, 发送半消息, 发现超过20s后, 再提交这个半消息, 消息并不会被发现, 低于20s就可以,ons是不是对于半消息的存储有时间限制,有大佬知道这个问题吗?

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
=====这是一个广告位,招租中,联系qq 78315851====
1 条回复 A 作者 M 管理员
  1. 在Apache RocketMQ中,半消息是指发送方发送的事务消息的一种状态,当一条事务消息被发送时,发送方先发送一个半消息,等事务执行完成之后再提交这个半消息。在这个过程中,如果半消息在一定时间没有被提交,那么RocketMQ会认为这个事务已经失败并回滚,会丢弃这个半消息。

    默认情况下,RocketMQ会将半消息的最大存活时间设置为15秒,如果在这个时间范围内没有收到提交的消息,则会自动回滚这个事务并删除半消息。如果需要更改存活时间,可以通过修改RocketMQ配置文件中的”transactionMsgTimeout”参数来实现。

    因此,如果你的半消息提交时间超过20秒,可能已经超过了半消息的最大存活时间,所以RocketMQ会认为这个事务已经失败并删除半消息。建议在发送半消息时,尽可能保证在半消息存活时间内提交事务,避免数据的丢失。

  2. 在Apache RocketMQ中,发送半消息后,如果在规定时间内没有提交或者回滚,那么这个半消息会被RocketMQ服务器删除。默认情况下,RocketMQ服务器会在15s内检查半消息是否被提交或者回滚,如果没有,则会自动删除该半消息。可以通过修改messageDelayLevel参数来调整这个时间。

    在ONS中,由于其是建立在RocketMQ基础之上的云服务,因此也会遵循RocketMQ的相关规则。如果您的半消息在提交之前超过了20s,那么这个半消息很可能已经被RocketMQ服务器删除了,导致消息无法被发现。

    因此,建议在发送半消息时及时提交或者回滚,以避免出现这种情况。如果需要更长时间的等待期限,可以通过修改messageDelayLevel参数来调整等待时间。