顺序消息主要是指局部顺序,即生产者通过将某一类消息发送至同一个队列来实现。与发生普通消息相比,在发送顺序消息时要对同一类型的消息选择同一个队列,即同一个MessageQueue对象。
目前RocketMQ定义了选择MessageQueue对象的接口MessageQueueSelector,里面有方法select(final List mqs, final Message msg, final Object arg),并且RocketMQ默认实现了提供了两个实现类SelectMessageQueueByHash和SelectMessageQueueByRandoom,即根据arg参数通过Hash或者随机方式选择MessageQueue对象。
为了业务层根据业务需要能自定义选择规则,也可以在业务层自定义选择规则,然后调用DefaultMQProducer.send(Message msg, MessageQueueSelector selector, Object arg)方法完成顺序消息的方式。
与普通消息的发送方法DefaultMQProducer.send(Message msg)相比,在仅仅在选择MessageQueue对象上面有区别,DefaultMQProducer.send(Message msg, MessageQueueSelector selector, Object arg)方法最终调用DefaultMQProducerImpl.sendSelectImpl(Message msg, MessageQueueSelector selector, Object arg, CommunicationMode communicationMode, SendCallback sendCallback, long timeout)方法,其中 communicationMode等于SYNC,timeout等于DefaultMQProducer.sendMsgTimeout,默认为3秒(表示发送的超时时间为3秒
RocketMQ——Producer篇:发送顺序消息
