Apache RocketMQ中我测试ons的时候, 发送半消息, 发现超过20s后, 再提交这个半消息, 消息并不会被发现, 低于20s就可以,ons是不是对于半消息的存储有时间限制,有大佬知道这个问题吗?
在Apache RocketMQ中,半消息是指发送方发送的事务消息的一种状态,当一条事务消息被发送时,发送方先发送一个半消息,等事务执行完成之后再提交这个半消息。在这个过程中,如果半消息在一定时间没有被提交,那么RocketMQ会认为这个事务已经失败并回滚,会丢弃这个半消息。
默认情况下,RocketMQ会将半消息的最大存活时间设置为15秒,如果在这个时间范围内没有收到提交的消息,则会自动回滚这个事务并删除半消息。如果需要更改存活时间,可以通过修改RocketMQ配置文件中的"transactionMsgTimeout"参数来实现。
因此,如果你的半消息提交时间超过20秒,可能已经超过了半消息的最大存活时间,所以RocketMQ会认为这个事务已经失败并删除半消息。建议在发送半消息时,尽可能保证在半消息存活时间内提交事务,避免数据的丢失。
在Apache RocketMQ中,发送半消息后,如果在规定时间内没有提交或者回滚,那么这个半消息会被RocketMQ服务器删除。默认情况下,RocketMQ服务器会在15s内检查半消息是否被提交或者回滚,如果没有,则会自动删除该半消息。可以通过修改messageDelayLevel
参数来调整这个时间。
在ONS中,由于其是建立在RocketMQ基础之上的云服务,因此也会遵循RocketMQ的相关规则。如果您的半消息在提交之前超过了20s,那么这个半消息很可能已经被RocketMQ服务器删除了,导致消息无法被发现。
因此,建议在发送半消息时及时提交或者回滚,以避免出现这种情况。如果需要更长时间的等待期限,可以通过修改messageDelayLevel
参数来调整等待时间。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
涵盖 RocketMQ、Kafka、RabbitMQ、MQTT、轻量消息队列(原MNS) 的消息队列产品体系,全系产品 Serverless 化。RocketMQ 一站式学习:https://rocketmq.io/