天天看點

消息隊列MQMQ消息隊列

MQ消息隊列

MQ面試目标

什麼是MQ、為什麼用MQ

結合實際項目講自己用過的案例

rabbitmq/rocketmq/activemq/kafka什麼差別,分别适用什麼場景,怎麼結合自己的業務去技術選型

MQ學習筆記

消息隊列MQMQ消息隊列

ActiveMQ在成熟度比較優秀,但是它的性能方面比較欠缺,是以在吞吐量不太高的中小型企業比較受歡歡迎;

Kafka追求高吞吐量,一般應用在大資料,一開始目的用于日志收集和傳輸,它不支援事務、不追求消息傳遞的可靠性,是以根據業務需求自行判斷是否合适;

RocketMQ純java開發,起源kafka,并不是複制kafka,基于kafka的缺點方面做了優化,比如可靠性方面,阿裡對它的開源版本不支援事務,隻有付費雲産品才支援事務,它在阿裡衆多業務場景下經過不斷的優化得到了逐漸的完善;

RabbitMQ是Erlang語言開發的開源消息隊列,基于AMQP協定實作,AMQP協定的特點的可靠性、安全性比較好,基于它的性能和可靠性以及開源社群活躍的結合考量,得到了衆多企業的青睐。

AMQP和JMS的本質差别:JMS是基于API層面的限定,而AMQP是定義網絡交換的資料格式

消息隊列MQMQ消息隊列
消息隊列MQMQ消息隊列

虛拟主機的作用:類似資料庫中的庫概念,同一個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

消息隊列MQMQ消息隊列
消息隊列MQMQ消息隊列
  • work queues:沒有交換機
  • 訂閱模式:fanout,有交換機,所有消費者無條件/無過濾的接受廣播
  • routing:direct,有交換機,隊列綁定路由key,在交換機中根據路由key擷取指定消息
  • topic:基于direct的功能,可以使用通配符,簡化過濾規則
消息隊列MQMQ消息隊列

叢集

主從複制叢集:不可靠,從節點隻能在隊列看到隊列資訊,無法正常使用隊列資訊,如果主節點當機,整個系統不可用

鏡像叢集:實際上就是rabbitmq提供的政策模式,基于主從設定政策後達到自動/手動同步,實作高可用

學習MQ疑問

怎麼改端口?(預設服務端口5672/預設web管理界面端口15672/叢集的端口25672)