javascript
【SpringCloud-Alibaba系列教程】14.一文教你入门RocketMQ
<本文已參與 RocketMQ Summit 優秀案例征文活動,點此了解詳情>
MQ簡介
MQ(Message Queue)是一種跨進程的通信機制,用于消息傳遞。通俗點說,就是一個先進先出的數據結構。
MQ應用場景
異步解耦
很多場景不使用MQ會產生各個應用見緊密耦合在在一起,其實我們要遵循的原則就是高內聚低耦合,通過上圖我們就可以看到,消息生產者,不管消息消費者狀態如何,生產好的消息就直接投遞到MQ中,消息消費者也是同樣,不管消息生產者如何,只取MQ中的消息進行處理。這是解耦場景,還有就是異步,我們拿最簡單的注冊場景舉例子。
這樣如果正常情況我們需要150ms,但是正常的話,用戶不需要等待郵件系統,以及短信系統的完成,一旦用戶在注冊系統完成了以后,就注冊成功了,這樣的話我們就可以使用異步,
這樣通過MQ我們就實現了異步的操作。
流量削峰
流量削峰也是消息隊列MQ的常用場景,一般在秒殺或團隊搶購(高并發)活動中使用廣泛。
在秒殺或團隊搶購活動中,由于用戶請求量較大,導致流量暴增,秒殺的應用在處理如此大量的訪問流量后,下游
的通知系統無法承載海量的調用量,甚至會導致系統崩潰等問題而發生漏通知的情況。為解決這些問題,可在應用
和下游通知系統之間加入消息隊列MQ。比如平常用戶的請求我們會直接訪問數據庫,在大量用戶過來的時候,這樣的話我們會對數據庫照常比較大的壓力。在這里我們增加一個消息隊列,這樣的話不管你請求來多少,我先存入消息隊列,然后我再讓系統慢慢的處理你的請求,這樣很好的減緩了數據庫的訪問壓力。
RocketMQ介紹
阿里巴巴的MQ中間件,由java語言開發, 性能非常好,能夠撐住雙十一的大流量,而且使用起來很簡單。
我們開始吧
1.首先就是環境搭建。我們將在Linux操作系統搭建RocketMQ的服務端。
首先就是下載RocketMQ了。
Downloading the Apache RocketMQ Releases - Apache RocketMQ
然后就是登錄ssh連接相關功能了。
另一個環境就是Java環境了。
可以參考另外一個鏈接Linux搭建Java環境-阿里云開發者社區
在此就不過多贅述了。
然后我們就是下載好了所需要的一些安裝包。
我們把下載的rocketmq的文件上傳
然后使用解壓縮命令進行解壓。
unzip rocketmq-all-4.9.2-bin-release.zip
首先修改一下目錄名稱
然后通過cd 命令進去rocketmq目錄下的bin目錄。
我們首先改一些腳本的參數,由于本服務器比較小,所以需要修改,正常情況,修改成真實的1/2就可以了。
通過vim命令先修改runserver.sh
修改根據你的大小。我就修改成了256m。同樣runbrocker.sh也需要修改。
然后在bin使用命令啟動nohup ./mqnamesrv &
然后通過這個命令可以查看啟動日志
tail -f ~/logs/rocketmqlogs/namesrv.log
然后如果是云服務器的話,我們需要配置一個地方,進入上一級目錄
cd ..
然后進入conf目錄。
通過vim brocker.conf
添加下面的代碼
brokerIP1和brokerIP2默認獲取本地ip地址,在云服務器上會獲取內網ip地址,因此必須顯式設置
namesrvAddr=150.158.31.224:9876
brokerIP1=150.158.31.224
將namesrvAddr設置在configfile中
ip一定要換上你服務器外網的ip
然后我們需要啟動mqbrocker
回到rockermq根目錄(特別重要要不然運行不成功)
nohup sh bin/mqbroker -c conf/broker.conf &
查看啟動日志這樣就可以了。
tail -f ~/logs/rocketmqlogs/broker.log
然后這樣我們的服務端就可以配置完成了。
這樣我們是沒有可視化界面的。
當然RocketMQ有可視化界面的。
https://github.com/apache/rocketmq-externals/tags
下載后解壓出來。
然后配置一下application.properties
然后配置端口以及剛才我們配置的ip以及端口。
然后返回根目錄執行打包命令。
mvn package -Dmaven.test.skip=true
然后就可以在\target目錄看見打出來的包。
然后使用java -jar rocketmq-console-ng-1.0.0.jar
剛剛打出來的包進行運行
然后就是可視化界面了。
下面就是實戰
我們結合java進行實戰消息發送。
消息發送步驟:
1.創建消息生產者,指定生產者所屬的組名
2.指定Nameserver地址
3.啟動生產者
4.創建消息對象,指定主題、標簽和消息體
5.發送消息
6.關閉生產者
然后我們新建test類,進行消息投遞測試。
public class RocketMQSendMessageTest {
}
然后就可以在可視化界面看到我們的消息了。
接受消息步驟:
1.創建消息消費者,指定消費者所屬的組名
2.指定Nameserver地址
3.指定消費者訂閱的主題和標簽
4.設置回調函數,編寫處理消息的方法
5.啟動消息消費者
然后我們新建test類,進行消息消費測試。
public class RocketMQReceiveMessageTest {
public static void main(String[] args) throws MQClientException {// 1.創建消息消費者,指定消費者所屬的組名DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("myproducer-group");// 2.指定Nameserver地址consumer.setNamesrvAddr("122.9.161.37:9876");// 3.指定消費者訂閱的主題和標簽consumer.subscribe("myTopic","*");// 4.設置回調函數,編寫處理消息的方法consumer.registerMessageListener(new MessageListenerConcurrently(){//獲取接收到的消息@Overridepublic ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list, ConsumeConcurrentlyContext consumeConcurrentlyContext) {//消費邏輯System.out.println("接收到消息:"+list);//返回消息成功信息。return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;}});// 5.啟動消息消費者consumer.start();System.out.println("消費者啟動成功了"); }}
這樣就完成了我們消費者與生產者相關的操作,當然在實際應用中還是有很多需要調整的地方,這樣就基本上完成了,RocketMQ的入門操作。
關于RocketMQ的項目實戰后期會在這個項目上不斷添加,喜歡的請點個start~
項目源碼參考一下分支220310_xgc_useRocketMQ
Gitee:springcloud-alibaba: 一個保姆級教學SpringCloud-Alibaba全棧教程
GitHub:GitHub - CoderXGC/springcloud-alibaba: 一個保姆級教學SpringCloud-Alibaba全棧教程
?
總結
以上是生活随笔為你收集整理的【SpringCloud-Alibaba系列教程】14.一文教你入门RocketMQ的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 重磅 | 《中国移动云网一体产品白皮书(
- 下一篇: 场景联创 施耐德电气“绿色智能制造创赢计