參考:https://www.jianshu.com/p/79ca08116d57
https://www.cnblogs.com/dwlovelife/p/10982735.html
https://blog.csdn.net/u013871100/article/details/82982235
MQ主要用途:不同進程Process/線程Thread之間通信
RabbitMQ:在AMQP(高級消息隊列協議)基礎商使用Erlang開發的消息中間件
RabbitMQ架構:
AMQP:Advanced Message Queuing Protocol 高級消息隊列協議
AMQP的核心思想是生產者和消費者進行隔離,生產者從不直接將消息發送給隊列,生產者通常不知道是否一個消息會被髮送到隊列中,只是將消息發送到一個交換機,先由exchange接收,然後按照策略轉發到queue進行存儲。
RabbitMq六種工作模型
1、simple模式
生產者將消息直接放進隊列,消費者監聽消息隊列,如果有消息就消費,消息被拿走後,自動從隊列中刪除。
2、work工作模式(資源的競爭)
消息產生者將消息放入隊列消費者可以有多個,消費者1,消費者2,同時監聽同一個隊列,消息被消費?C1 C2共同爭搶當前的消息隊列內容,誰先拿到誰負責消費消息
3、發佈訂閱模式
消息產生者將消息放入交換機,交換機發布訂閱把消息發送到所有消息隊列中,對應消息隊列的消費者拿到消息進行消費
4、路由模式
交換機根據路由的key,只能匹配上路由key對應的消息隊列,對應的消費者才能消費消息
5、topic主題模式(特殊的路由模式)
①*(星號)僅代表一個單詞
②#(井號)代表任意個單詞
*.orange.* 能匹配 a.orange.a,b.orange.a,aa.orange.bb等等
lay.#能匹配的就多了,他只要一lay.開頭的都匹配,他可以匹配lay.a,lay.a.b,lay.b.c
6、RPC模式(很少使用)
客戶端發送請求消息,服務端回覆響應消息,爲了接受響應response,客戶端需要發送回調一個隊列的地址來接受響應,每條消息在發送的時候會帶上一個唯一的correlation_id,相應的服務端處理計算後會將結果返回到對應的correlation_id