Rocketmq之一個JVM中producer的producerGroup要唯一


如果代碼是這么寫的

public static void main (String[] args) throws MQClientException {

        DefaultMQProducer defaultMQProducer = new DefaultMQProducer();
        defaultMQProducer.setProducerGroup("operationLogGroup");
        defaultMQProducer.setInstanceName("Constant.operationLogInstance");
        defaultMQProducer.setNamesrvAddr("Constant.rocketQueneAddr");

        DefaultMQProducer defaultMQProducer2 = new DefaultMQProducer();
        defaultMQProducer2.setProducerGroup("operationLogGroup");
        defaultMQProducer2.setInstanceName("Constant.operationLogInstance");
        defaultMQProducer2.setNamesrvAddr("Constant.rocketQueneAddr");
        try {
            defaultMQProducer.start();
            defaultMQProducer2.start();
            Message message = new Message();

            defaultMQProducer.send(message);
        } catch (Exception e) {
            System.out.println("produce operation log message error" + e.getMessage());
        } finally {
            defaultMQProducer.shutdown();
        }
    }

一旦執行會報錯

produce operation log message errorThe producer group[operationLogGroup] has been created before, specify another name please.

源代碼是在這里

DefaultMQProducerImpl#start()

public void start(final boolean startFactory) throws MQClientException {
        switch (this.serviceState) {
            case CREATE_JUST:
                this.serviceState = ServiceState.START_FAILED;

                this.checkConfig();

                if (!this.defaultMQProducer.getProducerGroup().equals(MixAll.CLIENT_INNER_PRODUCER_GROUP)) {
                    this.defaultMQProducer.changeInstanceNameToPID();
                }

                this.mQClientFactory = MQClientManager.getInstance().getOrCreateMQClientInstance(this.defaultMQProducer, rpcHook);

                boolean registerOK = mQClientFactory.registerProducer(this.defaultMQProducer.getProducerGroup(), this);
public boolean registerProducer(final String group, final DefaultMQProducerImpl producer) {
        if (null == group || null == producer) {
            return false;
        }

        MQProducerInner prev = this.producerTable.putIfAbsent(group, producer);
        if (prev != null) {
            log.warn("the producer group[{}] exist already.", group);
            return false;
        }

        return true;
    }

其中  private final ConcurrentMap<String/* group */, MQProducerInner> producerTable = new ConcurrentHashMap<String, MQProducerInner>(); 

所以一個JVM中同一個producergroup不能有兩個producer的

同樣的是,在一個JVM進程中同一個消費組也不能有兩個消費者。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM