RocketMQ顺序消息

RocketMQ顺序消息包括三个部分,顺序发送,顺序存储,顺序消费。关于存储,队列天然支持顺序存储所以这里主要聊聊顺序发送和顺序消费

1、顺序发送

要保证顺序发送需要保证只有一个Producer串行发送。

但是这样如果数据量大的话会出现瓶颈。有时候我们不要求所有的数据都要有序。比如订单状态变更,我们保证某个订单按照顺序发送和消费即可。

然而,RockertMQ同一个topic会有多个队列,虽说一个队列天然有序,但是多个队列就不能保证顺序了。所以发送的时候我们要保证同一个订单消息发送到同一个队列中。

RocketMQ支持我们在发送消息的时候选择队列,代码如下

int arg = orderId;
producer.send(message
    // MessageQueueSelector
    , (list, message, arg) -> list.get(((int) arg) % list.size())
    , arg);

2、顺序消费

保证顺序消费,需要保证一个队列只能被一个consumer获取消息,并且要串行消费。

通过创建Topic时制定参数-o=true(--order),即顺序消息。

另外nameserver中的配置orderMessageEnable 和 returnOrderTopicConfigToBroker 也必须是 true

你可能感兴趣的:(java,服务框架,rocketmq)