本文基於 v3.2.6版本代碼分析
直接用main方法啓動了nameserver和broker
com.alibaba.rocketmq.namesrv.NamesrvStartup
com.alibaba.rocketmq.broker.BrokerStartup
進入bin目錄下用mqadmin.exe創建了一個topic並且成功了
然後寫了一個簡單的producer
package com.alibaba.rocketmq.client;
import com.alibaba.rocketmq.client.producer.DefaultMQProducer;
import com.alibaba.rocketmq.client.producer.SendResult;
import com.alibaba.rocketmq.common.message.Message;
public class Producer {
public static void main(String[] args) throws Exception{
DefaultMQProducer producer = new DefaultMQProducer("groupa");
producer.setNamesrvAddr("localhost:9876");
producer.start();
Message msg = new Message("mytopic", ("Hello RocketMQ ").getBytes());
msg.setKeys("mykey");
msg.setTags("mytag");
SendResult sendResult = producer.send(msg);
System.out.println(sendResult);
producer.shutdown();
}
}
但是始終報錯:
最後查了很多資料,也跟了源碼(網上很多說是設置 autoCreateTopic,其實是錯的,因爲broker默認就是true)
最終發現是broker啓動的方式有問題,啓動的時候必須指明nameserver的地址
在
com.alibaba.rocketmq.broker.BrokerStartup.createBrokerController(String[])
稍微加了一句代碼後ok了
或者是設置一個 NAMESRV_ADDR 的環境變量,因爲broker啓動的時候會去獲取這個環境變量
結果: