新聞中心
今天就跟大家聊聊有關(guān)rocketmq中MessageQueueSelector的作用是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
創(chuàng)新互聯(lián)公司是一家專注于網(wǎng)站設(shè)計制作、網(wǎng)站制作和成都IDC機房托管的網(wǎng)絡(luò)公司,有著豐富的建站經(jīng)驗和案例。
MessageQueueSelector
rocketmq-client-4.5.2-sources.jar!/org/apache/rocketmq/client/producer/MessageQueueSelector.java
public interface MessageQueueSelector { MessageQueue select(final Listmqs, final Message msg, final Object arg); }
MessageQueueSelector接口定義了select方法,返回MessageQueue;它有幾個實現(xiàn)類,分別是SelectMessageQueueByHash、SelectMessageQueueByRandom、SelectMessageQueueByMachineRoom
SelectMessageQueueByHash
rocketmq-client-4.5.2-sources.jar!/org/apache/rocketmq/client/producer/selector/SelectMessageQueueByHash.java
public class SelectMessageQueueByHash implements MessageQueueSelector { @Override public MessageQueue select(Listmqs, Message msg, Object arg) { int value = arg.hashCode(); if (value < 0) { value = Math.abs(value); } value = value % mqs.size(); return mqs.get(value); } }
SelectMessageQueueByHash實現(xiàn)了MessageQueueSelector接口,其select方法取arg參數(shù)的hashcode的絕對值,然后對mqs.size()取余,得到目標隊列在mqs的下標
SelectMessageQueueByRandom
rocketmq-client-4.5.2-sources.jar!/org/apache/rocketmq/client/producer/selector/SelectMessageQueueByRandom.java
public class SelectMessageQueueByRandom implements MessageQueueSelector { private Random random = new Random(System.currentTimeMillis()); @Override public MessageQueue select(Listmqs, Message msg, Object arg) { int value = random.nextInt(mqs.size()); return mqs.get(value); } }
SelectMessageQueueByRandom實現(xiàn)了MessageQueueSelector接口,其select方法直接根據(jù)mqs.size()隨機一個值作為目標隊列在mqs的下標
SelectMessageQueueByMachineRoom
rocketmq-client-4.5.2-sources.jar!/org/apache/rocketmq/client/producer/selector/SelectMessageQueueByMachineRoom.java
public class SelectMessageQueueByMachineRoom implements MessageQueueSelector { private Setconsumeridcs; @Override public MessageQueue select(List mqs, Message msg, Object arg) { return null; } public Set getConsumeridcs() { return consumeridcs; } public void setConsumeridcs(Set consumeridcs) { this.consumeridcs = consumeridcs; } }
SelectMessageQueueByMachineRoom實現(xiàn)了MessageQueueSelector接口,其select方法目前返回null
RocketMQTemplate
rocketmq-spring-boot-2.0.3-sources.jar!/org/apache/rocketmq/spring/core/RocketMQTemplate.java
public class RocketMQTemplate extends AbstractMessageSendingTemplateimplements InitializingBean, DisposableBean { private static final Logger log = LoggerFactory.getLogger(RocketMQTemplate.class); private DefaultMQProducer producer; private ObjectMapper objectMapper; private String charset = "UTF-8"; private MessageQueueSelector messageQueueSelector = new SelectMessageQueueByHash(); private final Map cache = new ConcurrentHashMap<>(); //only put TransactionMQProducer by now!!! public DefaultMQProducer getProducer() { return producer; } public void setProducer(DefaultMQProducer producer) { this.producer = producer; } public ObjectMapper getObjectMapper() { return objectMapper; } public void setObjectMapper(ObjectMapper objectMapper) { this.objectMapper = objectMapper; } public String getCharset() { return charset; } public void setCharset(String charset) { this.charset = charset; } public MessageQueueSelector getMessageQueueSelector() { return messageQueueSelector; } public void setMessageQueueSelector(MessageQueueSelector messageQueueSelector) { this.messageQueueSelector = messageQueueSelector; } //...... }
RocketMQTemplate默認創(chuàng)建的MessageQueueSelector是SelectMessageQueueByHash
看完上述內(nèi)容,你們對rocketmq中MessageQueueSelector的作用是什么有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。
當前文章:rocketmq中MessageQueueSelector的作用是什么
本文路徑:http://ef60e0e.cn/article/giogig.html