Rocketmq踩坑
阿新 • • 發佈:2021-07-21
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版本一致才可以連線