rocketmq 源碼調試報錯 No route info of this topic

本文基於 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啓動的時候會去獲取這個環境變量

 

結果:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章