1. 程式人生 > 其它 >Rocketmq踩坑

Rocketmq踩坑

Rocketmq踩坑合集

生產者無法傳送訊息

我的broker,namesrv中都沒有配置10909這個埠,其實10909是vip通道,Producer應該指定關閉vip通道連線

示例:

//1.建立訊息生產者producer,並指定生產者組名
        DefaultMQProducer producer = new DefaultMQProducer("group1");
        //2.指定namesrv地址
        producer.setNamesrvAddr("47.98.47.1:9876");
		//關閉vip通道
        producer.setVipChannelEnabled(false);
        //3.啟動producer
        producer.start();
        //4.建立訊息物件,指定主題Topic,Tag和訊息體
        for (int i = 0; i < 10; i++) {
            /**
             * 引數一:訊息主題Topic
             * 引數二:訊息Tag
             * 引數三:訊息內容
             */
            Message msg = new Message("base", "tag1", ("Hello World" + i).getBytes());
            //5.傳送訊息
            SendResult result = producer.send(msg, 100000);
            //傳送狀態
            SendStatus status = result.getSendStatus();
            //訊息id
            String msgId = result.getMsgId();
            //訊息佇列id
            int queueId = result.getMessageQueue().getQueueId();
            System.out.println("傳送狀態:"+result+",訊息id:"+msgId+",佇列"+queueId);

            TimeUnit.SECONDS.sleep(1);
        }
        //6.關閉生產者producer
        producer.shutdown();

解決之後又出現無法連線broker

原因出在broker的啟動配置檔案上

正確示例:

# brokerIp地址,注意拼寫,IP是大寫,單機broker叢集分別配置brokerIP1、brokerIP2、brokerIP3
brokerIP1={外網ip}
# 叢集名稱
brokerClusterName=DefaultCluster
# 同一組(主機從機)名字需一樣
brokerName=broker-a
# 主機為0,從機非0
brokerId=0
deleteWhen=04
fileReservedTime=48
# 角色,主機SYNC_MASTER,從機SLAVE
brokerRole=SYNC_MASTER
# 主從訊息存檔機制,這裡是非同步
flushDiskType=ASYNC_FLUSH
# 監聽埠,不可重複
listenPort=10911
# 訊息儲存路徑,單機叢集broker,不可重複
storePathRootDir=/rocketmqStore/a-m
namesrvAddr={外網ip}:9876

這裡主要的需要注意的就是namesrvAddr、storePathRootDir、brokerIP1

最後還需要注意的是rocketmq-client依賴,需要保持和伺服器rocketmq版本一致才可以連線