ROCKETMQ 源碼debug 問題集錦

按照這篇文章搭建debug環(huán)境ROCKETMQ源碼debug環(huán)境搭建郊尝。
出現(xiàn)了如下問題:
1嫉拐、錯誤: 找不到或無法加載主類 org.apache.rocketmq.namesrv.NamesrvStartup
和 錯誤: 找不到或無法加載主類 org.apache.rocketmq.broker.BrokerStartup
解決:在將runbroker.sh 的VM的參數(shù)復(fù)制到IDE時,刪除-cp ${CLASSPATH}虹钮,java cp命令:命令行指定需要加載的類classpath。
2、Please set the ROCKETMQ_HOME variable in your environment to match the location of the RocketMQ installation
解決:設(shè)置了ROCKETMQ_HOME之后依然無法識別威兜,可以重啟IDEA就好了。
3庐椒、MQClientException: No route info of this topic
解決:檢查ip地址是否有變化椒舵,最好把ip改為127.0.0.1,檢查三個地方IP是否一致约谈,1笔宿、broker啟動參數(shù);2棱诱、 producer.setNamesrvName()3泼橘、consumer.setNamesrvName();

Producer.java

import com.alibaba.rocketmq.client.exception.MQClientException;
import com.alibaba.rocketmq.client.producer.DefaultMQProducer;
import com.alibaba.rocketmq.client.producer.SendResult;
import com.alibaba.rocketmq.common.message.Message;

import java.util.concurrent.TimeUnit;

/**
 * Created by Tai on 2017/5/9.
 */
public class Producer {
    public static void main(String[] args) throws MQClientException,
            InterruptedException {
        /**
         * 一個應(yīng)用創(chuàng)建一個Producer,由應(yīng)用來維護(hù)此對象军俊,可以設(shè)置為全局對象或者單例<br>
         * 注意:ProducerGroupName需要由應(yīng)用來保證唯一<br>
         * ProducerGroup這個概念發(fā)送普通的消息時侥加,作用不大,但是發(fā)送分布式事務(wù)消息時粪躬,比較關(guān)鍵担败,
         * 因?yàn)榉?wù)器會回查這個Group下的任意一個Producer
         */
        DefaultMQProducer producer = new DefaultMQProducer("ProducerGroupName");
        producer.setNamesrvAddr("192.168.1.106:9876");
        producer.setInstanceName("Producer");

        /**
         * Producer對象在使用之前必須要調(diào)用start初始化,初始化一次即可<br>
         * 注意:切記不可以在每次發(fā)送消息時镰官,都調(diào)用start方法
         */
        producer.start();

        /**
         * 下面這段代碼表明一個Producer對象可以發(fā)送多個topic提前,多個tag的消息。
         * 注意:send方法是同步調(diào)用泳唠,只要不拋異常就標(biāo)識成功狈网。但是發(fā)送成功也可會有多種狀態(tài),<br>
         * 例如消息寫入Master成功,但是Slave不成功,這種情況消息屬于成功,但是對于個別應(yīng)用如果對消息可靠性要求極高世吨,<br>
         * 需要對這種情況做處理。另外闲孤,消息可能會存在發(fā)送失敗的情況,失敗重試由應(yīng)用來處理烤礁。
         */
        for (int i = 0; i < 100; i++) {
            try {
                {
                    Message msg = new Message("TopicTest1","TagA","OrderID001"
                            ,("TopicTest1--TagA--Hello MetaQ").getBytes());
                    SendResult sendResult = producer.send(msg);
                    System.out.println(sendResult);
                }

                {
                    Message msg = new Message("TopicTest2","TagB","OrderID0034",
                            ("TopicTest2--TagB--Hello MetaQ").getBytes());
                    SendResult sendResult = producer.send(msg);
                    System.out.println(sendResult);
                }

                {
                    Message msg = new Message("TopicTest3","TagC","OrderID061",
                            ("TopicTest3--TagC--Hello MetaQ").getBytes());
                    SendResult sendResult = producer.send(msg);
                    System.out.println(sendResult);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            TimeUnit.MILLISECONDS.sleep(4000);
        }

        /**
         * 應(yīng)用退出時讼积,要調(diào)用shutdown來清理資源,關(guān)閉網(wǎng)絡(luò)連接脚仔,從MetaQ服務(wù)器上注銷自己
         * 注意:我們建議應(yīng)用在JBOSS勤众、Tomcat等容器的退出鉤子里調(diào)用shutdown方法
         */
        producer.shutdown();
    }
}

PushConsumer.java

/**
 * Created by Tai on 2017/5/9.
 */

import java.util.List;

import com.alibaba.rocketmq.client.consumer.DefaultMQPushConsumer;
import com.alibaba.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
import com.alibaba.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import com.alibaba.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import com.alibaba.rocketmq.client.exception.MQClientException;
import com.alibaba.rocketmq.common.message.MessageExt;

public class PushConsumer {

    /**
     * 當(dāng)前例子是PushConsumer用法,使用方式給用戶感覺是消息從RocketMQ服務(wù)器推到了應(yīng)用客戶端鲤脏。<br>
     * 但是實(shí)際PushConsumer內(nèi)部是使用長輪詢Pull方式從MetaQ服務(wù)器拉消息们颜,然后再回調(diào)用戶Listener方法<br>
     */
    public static void main(String[] args) throws InterruptedException,
            MQClientException {
        /**
         * 一個應(yīng)用創(chuàng)建一個Consumer,由應(yīng)用來維護(hù)此對象凑兰,可以設(shè)置為全局對象或者單例<br>
         * 注意:ConsumerGroupName需要由應(yīng)用來保證唯一
         */
        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(
                "ConsumerGroupName");
        consumer.setNamesrvAddr("192.168.1.106:9876");
        consumer.setInstanceName("Consumber");

        /**
         * 訂閱指定topic下tags分別等于TagA或TagC或TagD
         * 訂閱指定topic下所有消息<br>
         * 注意:一個consumer對象可以訂閱多個topic
         */
        consumer.subscribe("TopicTest1", "TagA || TagC || TagD");
        consumer.subscribe("TopicTest2", "*");
        consumer.registerMessageListener(new MessageListenerConcurrently() {
            /**
             * 默認(rèn)msgs里只有一條消息掌桩,可以通過設(shè)置consumeMessageBatchMaxSize參數(shù)來批量接收消息
             */
            public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {
                System.out.println(Thread.currentThread().getName()
                        + " Receive New Messages: " + msgs.size());

                for (MessageExt msg : msgs) {
                    System.out.println(new String(msg.getBody()));
                    if (msg.getTopic().equals("TopicTest1")) {
                        // 執(zhí)行TopicTest1的消費(fèi)邏輯
                        if (msg.getTags() != null && msg.getTags().equals("TagA")) {
                            // 執(zhí)行TagA的消費(fèi)
                           // System.out.println(new String(msg.getBody()));
                        } else if (msg.getTags() != null
                                && msg.getTags().equals("TagC")) {
                            // 執(zhí)行TagC的消費(fèi)
                        } else if (msg.getTags() != null
                                && msg.getTags().equals("TagD")) {
                            // 執(zhí)行TagD的消費(fèi)
                        }
                    } else if (msg.getTopic().equals("TopicTest2")) {
                       // System.out.println(new String(msg.getBody()));
                    }
                }
                return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
            }
        });

        /**
         * Consumer對象在使用之前必須要調(diào)用start初始化,初始化一次即可<br>
         */
        consumer.start();

        System.out.println("Consumer Started.");
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末姑食,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子茅坛,更是在濱河造成了極大的恐慌音半,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贡蓖,死亡現(xiàn)場離奇詭異曹鸠,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)斥铺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門彻桃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人晾蜘,你說我怎么就攤上這事邻眷。” “怎么了剔交?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵肆饶,是天一觀的道長。 經(jīng)常有香客問我岖常,道長驯镊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮板惑,結(jié)果婚禮上橄镜,老公的妹妹穿的比我還像新娘。我一直安慰自己冯乘,他們只是感情好洽胶,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著往湿,像睡著了一般妖异。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上领追,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天他膳,我揣著相機(jī)與錄音,去河邊找鬼绒窑。 笑死棕孙,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的些膨。 我是一名探鬼主播蟀俊,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼订雾!你這毒婦竟也來了肢预?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤洼哎,失蹤者是張志新(化名)和其女友劉穎烫映,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體噩峦,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡锭沟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了识补。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片族淮。...
    茶點(diǎn)故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖凭涂,靈堂內(nèi)的尸體忽然破棺而出祝辣,到底是詐尸還是另有隱情,我是刑警寧澤导盅,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布较幌,位于F島的核電站,受9級特大地震影響白翻,放射性物質(zhì)發(fā)生泄漏乍炉。R本人自食惡果不足惜绢片,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望岛琼。 院中可真熱鬧底循,春花似錦、人聲如沸槐瑞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽困檩。三九已至祠挫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間悼沿,已是汗流浹背等舔。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留糟趾,地道東北人慌植。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像义郑,于是被迫代替她去往敵國和親蝶柿。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理非驮,服務(wù)發(fā)現(xiàn)交汤,斷路器,智...
    卡卡羅2017閱讀 134,629評論 18 139
  • =========================================================...
    lavor閱讀 3,484評論 0 5
  • Kafka入門經(jīng)典教程-Kafka-about云開發(fā) http://www.aboutyun.com/threa...
    葡萄喃喃囈語閱讀 10,812評論 4 54
  • 1劫笙、運(yùn)行環(huán)境 主機(jī)IP 主機(jī)名 2蜻展、配置主機(jī)名(分別在五臺機(jī)器上執(zhí)行) hostname +主機(jī)名例如: h...
    獻(xiàn)給記性不好的自己閱讀 3,546評論 0 6
  • 從開始寫簡書到現(xiàn)在已經(jīng)寫了四十幾片文章了,文章的內(nèi)容參差不齊邀摆,有一些完全是為了湊字?jǐn)?shù)寫的,有的時候也會斷更伍茄,不想寫...
    orzgee閱讀 191評論 0 0