rabbitmq入門一
RabbitMQ架構
- RabbitMQ Server: 也叫broker server
- Producer: 訊息生產者
- Consumer:訊息消費者
- Exchange:生產者將訊息傳送到Exchange(交換器)
- Queue:(佇列)是RabbitMQ的內部物件,用於儲存訊息
- RoutingKey:生產者在將訊息傳送給Exchange的時候,一般會指定一個routing key, 來指定這個訊息的路由規則,而這個routing key需要與Exchange Type及binding key聯 合使用才能最終生效。
-
Connection: (連線):Producer和Consumer都是通過TCP連線到RabbitMQ Server
-
Channels: (通道):它建立在上述的TCP連線中。資料流動都是在Channel中進行 的。
-
VirtualHost:許可權控制的基本單位,一個VirtualHost裡面有若干Exchange和 MessageQueue,以及指定被哪些user使用
docker安裝
docker run -it --name=rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 15671:15671 -p 15672:15672 -p 25672:25672 rabbitmq:management
rabbitmq需要有對映以下埠: 5671 5672 4369 15671 15672 25672
測試
訪問:(xdp是我虛擬機器的IP,我在本地配置了hosts域名 解析)
http://xdp:15672/
以下介面表示安裝成功
輸入使用者名稱和密碼,都為guest 進入主介面
新增一個佇列
Durability:是否做持久化 Durable(持久)
Auto delete : 是否自動刪除
三種訊息模式
Direct模式
點對點
任何傳送到Direct Exchange的訊息都會被轉發到RouteKey中指定的Queue。
1.一般情況可以使用rabbitMQ自帶的Exchange:”"(該Exchange的名字為空字串,下 文稱其為default Exchange)。
2.這種模式下不需要將Exchange進行任何繫結(binding)操作
3.訊息傳遞時需要一個“RouteKey”,可以簡單的理解為要傳送到的佇列名字。
4.如果vhost中不存在RouteKey中指定的佇列名,則該訊息會被拋棄。
Fanout模式
訊息一次發給多個佇列
任何傳送到Fanout Exchange的訊息都會被轉發到與該Exchange繫結(Binding)的所有 Queue上。
1.可以理解為路由表的模式
2.這種模式不需要RouteKey
3.這種模式需要提前將Exchange與Queue進行繫結,一個Exchange可以繫結多個 Queue,一個Queue可以同多個Exchange進行繫結。
4.如果接受到訊息的Exchange沒有與任何Queue繫結,則訊息會被拋棄。
Topic模式
任何傳送到Topic Exchange的訊息都會被轉發到所有關心RouteKey中指定話題的Queue 上
1.這種模式較為複雜,簡單來說,就是每個佇列都有其關心的主題,所有的訊息都帶有一 個“標題”(RouteKey),Exchange會將訊息轉發到所有關注主題能與RouteKey模糊匹配的 佇列。
2.這種模式需要RouteKey,也許要提前繫結Exchange與Queue。
3.在進行繫結時,要提供一個該佇列關心的主題,如“#.log.#”表示該佇列關心所有涉及 log的訊息(一個RouteKey為”MQ.log.error”的訊息會被轉發到該佇列)。
4.“#”表示0個或若干個關鍵字,“”表示一個關鍵字。如“log.”能與“log.warn”匹配,無法 與“log.warn.timeout”匹配;但是“log.#”能與上述兩者匹配。
5.同樣,如果Exchange沒有發現能夠與RouteKey匹配的Queue,則會拋棄此訊息