RabbitMQ|非同步
- 2020 年 5 月 9 日
- 筆記
- 後端, 網路通訊, 電腦理論與基礎-網路通訊
RabbitMQ|非同步
我們日常生活中肯定遇到「分身乏術」的情況,在出現這種情況時我們肯定只能按部就班一件一件事情來處理,這樣就會浪費一些不必要的時間,如在書寫作業的時候我們只有在寫完一門課作業後才能去完成另外一門的作業。但在電腦中這個問題在一定程度上被很好的解決,這就是使用非同步的思想,本文就來論述這個問題。
1 概念|非同步
提到非同步很自然就會想到同步。
1.1 同步與非同步
二者都是一種通訊方式,關注的是消息通訊機制 (synchronous communication/ asynchronous communication)。
(1)同步
使用某個東西時,調用方得等待這個調用返回結果才能繼續執行。
(2)非同步
調用方不會處於等待狀態去等待結果,而是在調用發出後調用者可用繼續執行後續操作,被調用者通過狀體來通知調用者,或者通過回掉函數來處理這個調用。
1.2 比喻
- 同步:咱們線下去商城買東西,看上一個東西,店家就去拿貨,而在拿貨這段時間(不長的時間)咱們只能在店裡等著,不能離開。
- 非同步:咱們線上買東西,手機app下單後就可以做其他的事情(學習、遊戲),等貨到了咱們去簽收就好了。
上面的過程,我們可以將買東西 看出是咱們的次業務,而其他事情是我們的主業務, 那麼我們要提高效率肯定需要將將次業務從主業務分離(電腦中為解耦 )出來,這樣就引出了生產者消費者設計模式。
2 生產者消費者設計模式
尋找中間人(broker)搭橋,保證兩個業務沒有直接關聯。這種解耦方式為:生產者消費者設計模式。如下圖:
即:生產者生成消息,快取到消息隊列中,消費者讀取消息隊列中的消息並執行。這其中消息隊列是關鍵。
咱們可以把消息隊列看作是消息在傳輸的過程中保存消息的容器。
3 RabbitMQ介紹
現在主流消息隊列有:RabbitMQ、ActiveMQ、Kafka等等。
3.1 主流消息隊列比較:
(1)RabbitMQ和ActiveMQ比較
- 系統吞吐量:RabbitMQ好於ActiveMQ
- 持久化消息:RabbitMQ和ActiveMQ都支援
- 高並發和可靠性:RabbitMQ好於ActiveMQ
(2)RabbitMQ和Kafka:
- 系統吞吐量:RabbitMQ弱於Kafka
- 可靠性和穩定性:RabbitMQ好於Kafka比較
- 設計初衷:Kafka是處理日誌的,是日誌系統,所以並沒有具備一個成熟MQ應該具備的特性。
3.2 RabbitMQ安裝(mac電腦下)
本次安裝筆者走了很多彎路,回過頭來集中的問題出在用終端命令始終無法從github上下載RabbitMQ的環境壓縮包,且網上教程也多是使用終端來下載,為此耽誤了很長的時間,下面介紹下我的方法。
(1)rabbitmq-server-generic-unix-3.8.3.tar.xz下載
網址://www.rabbitmq.com/install-generic-unix.html#downloads
選擇下圖的位置進行下載:
(2)移動手動下載好的文件到文件目錄
- 複製下載好的文件
- 訪達-前往-前往文件夾:輸入~/Library/Caches/Homebrew進入這個目錄
- 打開後將看到「downloads」目錄,裡面就是安裝依賴時下載的快取文件,downloads文件夾同層級外面是downloads裡面的文件替身
- 此時將之前下載好的文件粘貼到dowanloads目錄下。
- 會發現一個文件後綴為:.incomplete,這是因為之前沒有下完整所以顯示臨時文件後綴,複製這個文件夾的名稱,然後選擇剛粘貼過來的文件,重命名並粘貼,同時去掉後綴.incomplete。
- 當你找不到.incomplete文件時,是因brew還沒開始生成下載的臨時文件,那你就再次運行一下就可以了。
(3)終端輸入brew install rabbitmq
即可
3.3 RabbitMQ的配置遠程訪問(mac電腦下)
進入/usr/local/etc/rabbitmq
找到文件rabbitmq-env.conf,並打開進行如下圖修改,將原有的127.0.0.1刪除:
3.4 brew管理RabbitMQ(mac系統下)
筆者使用brew進行管理,所以需要您先對homebrew進行安裝,brew管理具體如下:
# 啟動
$ brew services start rabbitmq
# 重啟
$ brew services restart rabbitmq
# 停止
$ brew services stop rabbitmq