现象描述
我们作为生产者,按照顺序发送了的;但是消费者接收顺序不对
可能的原因
1、消费者需要指定为 同步消费模式
;(开始以为是下游应用没正确设置消费模式)
consumeMode = ConsumeMode.ORDERLY,
默认值是 consumeMode = ConsumeMode.CONCURRENT
2、生产者,没有将同一个id的两条消息,推送到同一个队列中 (此次问题的原因
)☑️
/**************验证rocketmq顺序消费***************/
@RequestMapping("/send/ordered")
public String sendOrderedMsg(){
/**
* hashKey: 为了保证报到同一个队列中,将消息发送到orderTopic主题上
*/
rocketMQTemplate.syncSendOrderly("orderTopic","no1","order");
rocketMQTemplate.syncSendOrderly("orderTopic","no2","order");
rocketMQTemplate.syncSendOrderly("orderTopic","no3","order");
rocketMQTemplate.syncSendOrderly("orderTopic","no4","order");
return "success";
}
我们业务中,只需要保证同一个业务唯一键的消息,放置到同一个队列中就可以了(只有相同唯一键的数据对顺序有要求)