前面幾篇文章介紹了為什麼選擇RocketMQ,以及與kafka的一些對比: 阿里 RocketMQ 優勢對比,方便大家對於RocketMQ有一個簡單的整體瞭解,之後介紹了:MQ 應用場景,讓我們知道MQ在什麼時候可以使用,可以解決什麼問題,之後介紹了:RocketMQ叢集部署配置;本篇文章接著上篇內容之後,來給大家介紹下RocketMQ快速入門。
如何使用
1、引入 rocketmq-client
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.1.0-incubating</version>
</dependency>
複製程式碼
2、編寫Producer
DefaultMQProducer producer = new DefaultMQProducer("producer_demo");
//指定NameServer地址
producer.setNamesrvAddr("192.168.116.115:9876;192.168.116.116:9876"); //修改為自己的
/**
* Producer物件在使用之前必須要呼叫start初始化,初始化一次即可
* 注意:切記不可以在每次傳送訊息時,都呼叫start方法
*/
producer.start();
for (int i = 0; i < 997892; i++) {
try {
//構建訊息
Message msg = new Message("TopicTest" /* Topic */,
"TagA" /* Tag */,
("測試RocketMQ" + i).getBytes(RemotingHelper.DEFAULT_CHARSET)
);
//傳送同步訊息
SendResult sendResult = producer.send(msg);
System.out.printf("%s%n", sendResult);
} catch (Exception e) {
e.printStackTrace();
Thread.sleep(1000);
}
}
producer.shutdown();
複製程式碼
3、編寫Consumer
/**
* Consumer Group,非常重要的概念,後續會慢慢補充
*/
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("consumer_demo");
//指定NameServer地址,多個地址以 ; 隔開
consumer.setNamesrvAddr("192.168.116.115:9876;192.168.116.116:9876"); //修改為自己的
/**
* 設定Consumer第一次啟動是從佇列頭部開始消費還是佇列尾部開始消費
* 如果非第一次啟動,那麼按照上次消費的位置繼續消費
*/
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
consumer.subscribe("TopicTest", "*");
consumer.registerMessageListener(new MessageListenerConcurrently() {
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs,
ConsumeConcurrentlyContext context) {
try {
for(MessageExt msg:msgs){
String msgbody = new String(msg.getBody(), "utf-8");
System.out.println(" MessageBody: "+ msgbody);//輸出訊息內容
}
} catch (Exception e) {
e.printStackTrace();
return ConsumeConcurrentlyStatus.RECONSUME_LATER; //稍後再試
}
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; //消費成功
}
});
consumer.start();
System.out.printf("Consumer Started.%n");
複製程式碼
4、說明
各位根據自己的環境,修改NamesrvAddr的值,我的叢集請參考:RocketMQ叢集部署配置。稍後通過RocketMQ管控臺就可以看到之前搭建的多Master多Slave模式,非同步複製叢集模式。
5、通過RocketMQ管控臺
rocketmq-console-ng獲取方式為:rocketmq-console-ng,之後通過mavne進行編譯獲取jar,命令如下:
mvn clean package -Dmaven.test.skip=true
java -jar target/rocketmq-console-ng-1.0.0.jar
複製程式碼
得到rocketmq-console-ng-1.0.0.jar之後,找到rocketmq-console-ng-1.0.0.jar\BOOT-INF\classes\application.properties檔案,根據自己的NamesrvAddr進行修改rocketmq.config.namesrvAddr的值。
直接啟動:
java -jar rocketmq-console-ng-1.0.0.jar
複製程式碼
管控臺是基於springboot的,的確springboot非常方便和非常火了,所以有必要去學習下springboot了(其實還是spring系列,所以spring也必要深入學習下),稍後通過管控臺進行觀察執行。
6、執行觀察
一個好的習慣是先執行Consumer,之後在執行Producer,之後通過rocketmq-console-ng管控臺觀察
執行完成之後,的確broker-a的資料加上broker-b的資料量就等於我們傳送的資料量,而且slave的數量也master的數量也是一致的,效果如下:
檢視傳送這些資料,2臺機器的磁碟情況如下: rocketmq1佔用磁碟空間
rocketmq2佔用磁碟空間到目前位置,關於RocketMQ快速入門就結束了,未完待續……
如果讀完覺得有收穫的話,歡迎點贊加關注。
個人公眾號,歡迎關注,查閱更多精彩歷史!!!