1. 程式人生 > >rabbitmq入門一

rabbitmq入門一

RabbitMQ架構

  1. RabbitMQ Server: 也叫broker server
  2. Producer: 訊息生產者
  3. Consumer:訊息消費者
  4. Exchange:生產者將訊息傳送到Exchange(交換器)
  5. Queue:(佇列)是RabbitMQ的內部物件,用於儲存訊息
  6. RoutingKey:生產者在將訊息傳送給Exchange的時候,一般會指定一個routing key, 來指定這個訊息的路由規則,而這個routing key需要與Exchange Type及binding key聯 合使用才能最終生效。
  7. Connection: (連線):Producer和Consumer都是通過TCP連線到RabbitMQ Server

  8. Channels: (通道):它建立在上述的TCP連線中。資料流動都是在Channel中進行 的。

  9. 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,則會拋棄此訊息