顺序消息: 1. 生产者有多个instance, 需要业务方自己写额外代码,只保证有1个instance去发顺序消息? 有其他办法么? 2. 顺序消息,我看文档没有要求只有一个consumer消费,多个消费方基于ack不会造成乱序?
使用 Mutex 实现机器级别的锁:业务方可以在多个 instance 之上部署一个共享资源服务,用一个 Mutex 对象来实现机器级别的锁。每次要发送有序消息的 instance,需要先获取 Mutex 锁,如果某个 instance 获取到 Mutex 锁,则该 instance 可以正常发送有序消息,其他 instance 发送无序消息或等待下一个周期。可以采用 Redis 等分布式锁技术实现 Mutex 锁。
这篇文档的逻辑是,对于消息来说顺序的定义,是涵盖生产到消费整个链路的定义的。生产顺序性约束了事件的产生到存储的顺序,解耦后,消费顺序性约束了从存储到业务消费逻辑的顺序。两者配合才是完整的业务预期。此回答整理自钉群“群2-Apache RocketMQ 中国开发者钉钉群”
你好,第一个问题,除了写代码实现,还可以使用Message Queue分组:可以在Broker端为顺序消息创建一个独立的Message Queue分组,然后将这个分组只分配给一个instance,保证只有指定的instance发送顺序消息。
第二个问题:确实不会造成乱序,为了保证消息的正确性,消费者需要对消息进行确认(ack),确保消息已经被消费,从而避免重复消费或消息丢失。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
涵盖 RocketMQ、Kafka、RabbitMQ、MQTT、轻量消息队列(原MNS) 的消息队列产品体系,全系产品 Serverless 化。RocketMQ 一站式学习:https://rocketmq.io/