概述
RabbitMQ是基于AMQP的一款訊息管理系統
RabbitMQ是一個開源的,在AMQ基礎上完整的,可服用的企業訊息系統
支持主流的作業系統,Linux、Windows、MacOX等,
多種開發語言支持,java、Python、Ruby、.NET、PHP、C/C++、node.js等
五種訊息模型
Simple
Work queues
Publish/Subscribe
Routing
Topics
RPC
RabbitMQ安裝
1 docker鏡像下載
如果docker pull rabbitmq 后面不帶management,啟動rabbitmq后是無法打開管理界面的,所以我們要下載帶management插件的rabbitmq.
-
docker pull rabbitmq:management
2.查看docker鏡像
-
docker images
3.創建rabbitmq容器
-
docker run -di -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:management
4.訪問管理界面
-
http://192.168.253.130:15672
-
可以使用默認的賬戶登錄,用戶名和密碼都guest
-
SpringBoot整合AMQP
1. 簡單佇列模式(Queue)
RabbitMQ是一個訊息代理:它接受和轉發訊息, 你可以把它想象成一個郵局:當你把郵件放在郵箱里時,你可以確定郵差先生最侄訓把郵件發送給你的收件人, 在這個比喻中,RabbitMQ是郵政信箱,郵局和郵遞員,
生產者將訊息發送到佇列,消費者從佇列中獲取訊息,佇列是存盤訊息的緩沖區
-
P(producer/ publisher):生產者,一個發送訊息的用戶應用程式,
-
C(consumer):消費者,消費和接收有類似的意思,消費者是一個主要用來等待接收訊息的用戶應用程式
-
佇列(紅色區域):RabbitMQ內部類似于郵箱的一個概念,雖然訊息流經RabbitMQ和你的應用程式,但是它們只能**存盤在佇列中,佇列**只受主機的記憶體和磁盤限制,實質上是一個大的訊息緩沖區,許多生產者可以發送訊息到一個佇列,許多消費者可以嘗試從一個佇列接收資料,
2.work訊息模型
作業佇列或者競爭消費者模式
-
P:生產者:任務的發布者
-
C1:消費者,領取任務并且完成任務,假設完成速度較快
-
C2:消費者2:領取任務并完成任務,假設完成速度慢
3. 發布者訂閱者模式(Publish/Subscribe)
在之前的模式中,我們創建了一個作業佇列, 作業佇列背后的假設是:每個任務只被傳遞給一個作業人員, 在這一部分,我們將做一些完全不同的事情 - 我們將會傳遞一個資訊給多個消費者, 這種模式被稱為“發布/訂閱”,
-
1、1個生產者,多個消費者
-
2、每一個消費者都有自己的一個佇列
-
3、生產者沒有將訊息直接發送到佇列,而是發送到了交換機
-
4、每個佇列都要系結到交換機
-
5、生產者發送的訊息,經過交換機到達佇列,實作一個訊息被多個消費者獲取的目的
-
X(Exchanges):交換機一方面:接收生產者發送的訊息,另一方面:知道如何處理訊息,例如遞交給某個特別佇列、遞交給所有佇列、或是將訊息丟棄,到底如何操作,取決于Exchange的型別,
-
Exchange型別有以下幾種:
-
Fanout:廣播,將訊息交給所有系結到交換機的佇列
-
Direct:定向,把訊息交給符合指定routing key 的佇列
-
Topic:通配符,把訊息交給符合routing pattern(路由模式) 的佇列
-
我們這里先學習
-
-
Exchange
-
Exchange(交換機)只負責轉發訊息,不具備存盤訊息的能力,因此如果沒有任何佇列與Exchange系結,或者沒有符合路由規則的佇列,那么訊息會丟失!
-
-
4.路由模式(Direct)
有選擇性的接收訊息
在訂閱模式中,生產者發布訊息,所有消費者都可以獲取所有訊息, 在路由模式中,我們將添加一個功能 - 只能訂閱一部分訊息, 例如,我們只能將重要的錯誤訊息引導到日志檔案(以節省磁盤空間),同時仍然能夠在控制臺上列印所有日志訊息, 但是,在某些場景下,我們希望不同的訊息被不同的佇列消費,這時就要用到Direct型別的Exchange, 在Direct模型下,佇列與交換機的系結,不能是任意系結了,而是要指定一個RoutingKey(路由key) 訊息的發送方在向Exchange發送訊息時,也必須指定訊息的routing key,
-
P:生產者,向Exchange發送訊息,發送訊息時,會指定一個routing key,
-
X:Exchange(交換機),接收生產者的訊息,然后把訊息遞交給 與routing key完全匹配的佇列
-
C1:消費者,其所在佇列指定了需要routing key 為 error 的訊息
-
C2:消費者,其所在佇列指定了需要routing key 為 info、error、warning 的訊息
5. 主題模式(Topic)
Topic型別的Exchange與Direct相比,都是可以根據RoutingKey把訊息路由到不同的佇列,只不過Topic型別Exchange可以讓佇列在系結Routing key 的時候使用通配符!
-
通配符規則:
-
#:匹配一個或多個詞
-
*:匹配不多不少恰好1個詞
-
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/294663.html
標籤:其他
