自定义消息发送规则
通過自定義發送策略來實現消息只發送到同一個隊列
因為一個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() {? @Override? public MessageQueue select(List<MessageQueue> list, Message message, Object? o) {? int key=o.hashCode();? int size = list.size();? int index = key%size;? return list.get(index);// list.get(0);? }? },"key_"+i);?
?
總結
- 上一篇: 消息的顺序消费
- 下一篇: 如何保证消息消费顺序呢?