MQ消息隊列
MQ面試目标
什麼是MQ、為什麼用MQ
結合實際項目講自己用過的案例
rabbitmq/rocketmq/activemq/kafka什麼差別,分别适用什麼場景,怎麼結合自己的業務去技術選型
MQ學習筆記

ActiveMQ在成熟度比較優秀,但是它的性能方面比較欠缺,是以在吞吐量不太高的中小型企業比較受歡歡迎;
Kafka追求高吞吐量,一般應用在大資料,一開始目的用于日志收集和傳輸,它不支援事務、不追求消息傳遞的可靠性,是以根據業務需求自行判斷是否合适;
RocketMQ純java開發,起源kafka,并不是複制kafka,基于kafka的缺點方面做了優化,比如可靠性方面,阿裡對它的開源版本不支援事務,隻有付費雲産品才支援事務,它在阿裡衆多業務場景下經過不斷的優化得到了逐漸的完善;
RabbitMQ是Erlang語言開發的開源消息隊列,基于AMQP協定實作,AMQP協定的特點的可靠性、安全性比較好,基于它的性能和可靠性以及開源社群活躍的結合考量,得到了衆多企業的青睐。
AMQP和JMS的本質差别:JMS是基于API層面的限定,而AMQP是定義網絡交換的資料格式
虛拟主機的作用:類似資料庫中的庫概念,同一個rabbitmq服務端下可以建立多個虛拟主機,便于供不同場景或不同項目共用同一服務端
提供rabbitmq的連接配接資訊中包括了連接配接的使用者賬号和密碼,而在服務端可以通過指令方式或者web管理界面中對使用者的權限和虛拟主機進行管理,這樣就便于程式知道連接配接至rabbitmq後從哪個虛拟主機中生産和消費消息
據了解可以省略交換機的模式,直接将消息放置于隊列queue中
建立消費者demo代碼示例(添加AMQP用戶端依賴、服務端的虛拟主機/使用者的建立/使用者權限的設定、代碼連接配接服務端、釋出消息):
https://www.bilibili.com/video/BV1dE411K7MG?p=5&spm_id_from=pageDriver
官方示例的幾種消費模型
https://www.rabbitmq.com/getstarted.html
- work queues:沒有交換機
- 訂閱模式:fanout,有交換機,所有消費者無條件/無過濾的接受廣播
- routing:direct,有交換機,隊列綁定路由key,在交換機中根據路由key擷取指定消息
- topic:基于direct的功能,可以使用通配符,簡化過濾規則
叢集
主從複制叢集:不可靠,從節點隻能在隊列看到隊列資訊,無法正常使用隊列資訊,如果主節點當機,整個系統不可用
鏡像叢集:實際上就是rabbitmq提供的政策模式,基于主從設定政策後達到自動/手動同步,實作高可用
學習MQ疑問
怎麼改端口?(預設服務端口5672/預設web管理界面端口15672/叢集的端口25672)