现在有这么一个需求,对于一个任务,有暂停和恢复两个按钮。当按下其中一个按钮时,会通过 RocketMQ 发送事务消息通知其他模块执行相应的业务逻辑。但是如果用户不小心将一个暂停的任务恢复,又马上单机了暂停。此时一下发出恢复、暂停两个消息。如果消费的顺序是恢复、暂停则一切正常,但如果是暂停、恢复则该任务还是恢复到进行中状态,这样就出现问题。
说白了就是 RocketMQ 事务消息如何保证被消费者有序的消费,还请各位同行不吝赐教,提供下思路即可,如果能详细描述,更是感激不尽。
新增一个消费者组,该组中只有一个消费者,从而利用消息队列的 FIFO 实现消费者顺序消费,但是微服务有多个实例,还是可能会将两个消息负载均衡到不同的服务上。
消息发送的有序:push msg的时候按顺序推送,重写下 new MessageQueueSelector方法
消息存储的有序:期望的顺序消息存储在broker的同一个队列,在上述的MessageQueueSelector中选择队列
消息消费的有序:如果只有一个消费者,那么消费顺序就是按照队列的FIFO处理的,如果是消费者组,需要控制分布式锁,按顺序消费