通过自定义发送策略来实现消息只发送到同一个队列
因为一个Topic 会有多个Message Queue ,如果使用Producer 的默认配置,这个Producer 会轮流向各个Message Queue 发送消息。Consumer 在消费消息的时候,会根据负载均衡策略,消费被分配到的Message Queue
如果不经过特定的设置,某条消息被发往哪个Message Queue ,被哪个Consumer 消费是未知的
如果业务需要我们把消息发送到指定的Message Queue 里,比如把同一类型的消息都发往相同的Message Queue。那是不是可以实现顺序消息的功能呢?
和kafka一样,rocketMQ也提供了消息路由的功能,我们可以自定义消息分发策略,可以实现MessageQueueSelector,来实现自己的消息分发策略
SendResult sendResult=producer.send(msg, new MessageQueueSelector() {@Overridepublic MessageQueue select(List<MessageQueue> list, Message message, Objecto) {int key=o.hashCode();int size = list.size();int index = key%size;return list.get(index);// list.get(0);}},"key_"+i);