RabbitMQ使用詳解

2022-03-06 11:45:47 字數 4330 閱讀 1731

rabbitmq:企業級訊息佇列,遵循

amqp

協議,基於

erlang

語言開發,在可靠性、易用性和高可用等方面都比較優秀的乙個訊息中介軟體。在網際網路專案中,常見用途:

- 服務之間的業務解耦,避免發布時互相影響

- 非同步資料處理,以快速返回應答,包括日誌的收集和業務的處理

- 流量控制,避免瞬間突發資料影響到下游處理

傳統意義上的佇列,是一種資料結構,只是先進先出的乙個模組而已,

而amqp協議定義了如下兩種角色和三個功能模組:

- 訊息生產者

publisher

角色:只負責發布訊息,不關心訊息給誰了

- 訊息消費者

consumer

角色:負責接收和處理訊息

- exchange:接收生產者發布的訊息,並根據規則**給

queue

- queue:儲存訊息,並等待消費者過來接收處理

- binding:定義

exchange

和queue

之前的關聯,以及訊息**規則

routingkey

so,正確的使用

rabbitmq

的方式,是要進行如下

5個步驟的:

1. 建立乙個

exchange

2. 建立乙個

queue

3. 建立乙個

binding

,把exchange

和queue

關聯起來

4. 應用程式a給

exchange

發布訊息

5. 應用程式b從

queue

監聽訊息並處理

注意:exchange和

queue

之間可以新增多個繫結,例如:

1. 乙個

exchange

繫結到乙個

queue

2. 乙個

exchange

繫結到多個

queue

3. 多個

exchange

繫結到乙個

queue

4. 乙個

exchange

多次繫結到乙個

queue

,routingkey

不同高階概念:

exchange、

queue

和binding

,在建立時會有一些引數,這些引數指示了工作方式的不同,常用如下:

exchange型別:

exchange有

4種型別

fanout

、direct

、topic

、headers(第4

種本文不作介紹)

- fanout:廣播型別,該

exchange

收到的所有訊息,會**給繫結到它的所有

queue

,即使設定了**規則

routingkey

也不生效,因此該種型別的效能是最高的。

- direct:該

exchange

會根據**規則

routingkey

進行精確匹配,把訊息**給完全匹配

routingkey

的queue

。- topic:該

exchange

會根據**規則

routingkey

進行模糊匹配,把訊息**給匹配

routingkey

的queue

,模糊匹配支援和

#,其中匹配乙個詞,

#匹配乙個或多個詞。—

-注意:

rabbitmq

中,模糊匹配必須以小數點分隔,如

test.*

或test.*.abc

或test.#

或test.#.abc

,不支援

test*

,也不支援

test.*abc

exchange常用引數:

durable:是否持久化,如果設定為

false

,在rabbitmq

重啟後,該

exchange

會消失,需要重新建立。

autodelete:是否自動刪除,如果設定為

true

,並且繫結了

queue

或其它exchange

,那麼在最後乙個取消繫結事件後,該

exchange

會自動刪除自己。

internal:如果設定為

true

,該exchange

將不能用於接收生產者訊息,只能用於繫結到其它

exchange

。alternate-exchange:配置值為另乙個

exchange

,當該exchange

收到的訊息,無法**(沒有匹配的

route

)時,會**到配置的這個

exchange

queue常用引數:

durable:是否持久化,如果設定為

false

,在rabbitmq

重啟後,該

queue

會消失,需要重新建立。

autodelete:是否自動刪除,如果設定為

true

,並且有消費者成功連線,那麼在最後乙個消費者取消連線後,該

queue

會自動刪除自己。

x-expires:閒置時長,毫秒,如果達到閒置時長,該

queue

會自動刪除自己,閒置表示:沒有消費者連線、沒有重新定義、沒有呼叫過

basic.get

,注:可以與

autodelete

共用。x-message-ttl:訊息生存時長,毫秒,如果指定時間內入隊的訊息沒有被消費,那麼該訊息會被拋棄。

x-max-length:處於

ready

狀態的訊息最大個數,訊息數超過該數量時,會刪除最早入隊的訊息,以保證新訊息入隊。

x-max-length-bytes:同上,只是單位變成了訊息占用空間位元組數。

x-max-priority:該

queue

支援的訊息優先級數,例如設定為

10,表示支援

0~10共11

個優先順序,數字越大優先順序越高,越優先投遞,預設為

0,注:非必要情況不建議使用優先順序,會導致額外的

cpu、記憶體和磁碟消耗和額外的

erlang

程序。x-dead-letter-exchange:設定了

messagettl

時,過期的死信會**到這個

exchange

。x-dead-letter-routing-key:對應

x-dead-letter-exchange

的**規則,如果未設定,將使用死信本身的

routingkey

。持久化簡述:

rabbitmq支援

3個級別的持久化:

exchange

、queue

、message

,所以如果要確保已進入mq的訊息不丟失,那麼要在這

3個物件上都設定持久化。

場景示例:

乙個exchange多次繫結到乙個

queue

,routingkey

不同的使用場景:

做的乙個配置中心,給其它專案新增和讀取配置用,不同專案之前的配置有些要隔離,有些有共用,

比如a專案和

b專案都有個配置叫

dbconstr

,儲存資料庫連線串,但是

value

不同;a和b

的公司名要共用,可以:

定義乙個direct型別的

exchange

:exg1

a專案定義乙個

queuea

,跟exg1做2

次繫結:

bind exg1 routingkey:key.0

和 bind exg1 routingkey:key.a

b專案定義乙個

queueb

,跟exg1做2

次繫結:

bind exg1 routingkey:key.0

和 bind exg1 routingkey:key.b

發布公共訊息時,訊息的routingkey為:

key.0

發布a專案的訊息時,訊息的

routingkey

為:key.a

發布b專案的訊息時,訊息的

routingkey

為:key.b

rabbitMq 使用詳解

傳送訊息 所謂的生產者 rabbitmq host 127.0.0.1 listener acknowledge mode manual password 自己的密碼 port 5672 username 自己的使用者名稱 virtual host develop 虛擬伺服器,相當於許可權設定 mq...

RabbitMQ 詳解以及使用場景

mq全稱為message queue,訊息佇列 mq 是一種應用程式對應用程式的通訊方法。應用程式通過讀寫出入佇列的訊息 針對應用程式的資料 來通訊,而無需專用連線來鏈結它們。訊息傳遞指的是程式之間通過在訊息中傳送資料進行通訊,而不是通過直接呼叫彼此來通訊,直接呼叫通常是用於諸如遠端過程呼叫的技術。...

rabbitmq 配置詳解

一般情況下,rabbitmq的預設配置就足夠了。如果希望特殊設定的話,有兩個途徑 乙個是環境變數的配置檔案 rabbitmq env.conf 乙個是配置資訊的配置檔案 rabbitmq.config 注意,這兩個檔案預設是沒有的,如果需要必須自己建立。rabbitmq env.conf 這個檔案的...