1、方案一
很简单,问题产生的关键在于多个队列都有消息,我消费的时候又不知道哪个队列的消息是最新的。那么思路就有了,发消息的时候你要想保证有序性的话,就都给我发到一个queue上,然后消费的时候因为只有那一个queue上有消息且queue是FIFO,先进先出,所以正常消费就完了。
很完美。而且RocketMQ也给我们提供了这种发消息的时候选择queue的api(MessageQueueSelector)。直接上
代码
import java.util.List;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.MessageQueueSelector;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.common.message.MessageQueue;
/**
* 消息发送者
*/
public class Producer5 {
public static void main(String[] args)throws Exception {
DefaultMQProducer producer = new DefaultMQProducer("my-order-producer");
producer.setNamesrvAddr("124.57.180.156:9876");
producer.start();
for (int i

本文介绍了如何使用RocketMQ保证消息的顺序消费。方案一是通过将所有消息发送至同一个队列,利用MessageQueueSelector确保消息按顺序处理。消费者端通过单线程消费以保持FIFO特性。方案二涉及根据消息状态(如未支付、已支付、支付异常)发送到不同队列,通过自定义参数arg选择队列,并调整消费者线程数为1,保证逐个队列有序消费。
最低0.47元/天 解锁文章
2451

被折叠的 条评论
为什么被折叠?



