前言
RocketMQ完结篇,主要使用消息队列处理一些业务场景。
正文
顺序消息
顺序消息分为全局顺序消息和部分顺序消息。
全局顺序消息指某个 Topic 下的 所有消息都要保证顺序;
部分顺序消息只要保证每一组消息被顺序消费即可,如订单消息的例子,只要保证 同一个订单 ID 的三个消息能按顺序消费 即可。
全局顺序消息
要保 证全局顺序消息, 需要 先把 Topic 的读写队列数设置为 一,然后 Producer 和 Consumer 的并发设置也要是一 。 简单来说,为了保证整个 Topic 的 全局消息有序,只能消除所有的并发处理,各部分都设置成单线程处理 。 这时 高并发、高吞吐量的功能完全用不上了 。
部分顺序消息
要保证部分消息有序,需要发送端和消费端配合处理 。 在发送端,要做到 把同一业务 ID 的消息发送到同一个 Message Queue ;在消费过程中,要做到从 同一个 Message Queue 读取的消息不被并发处理,这样才能达到部分有序 。
发送端使用 MessageQueueSelector类来控制 把消息发往哪个 Message Queue,如代码:
for (int i= 0; i <100; i++) {
int orderid = i ;
Message msg =new Message ("OrderTopic8”, tags,”KEY" + i ,
(”Hello RocketMQ "