3. rabbitmq 基本概念詳解

consumer&producer

  • producer:
    • 建立channel.
    • 發送消息: 指定exchange name、routingKey、properties、body
  • consemer:
    • 建立Channel.
    • 聲明queue,指定queue name.
    • 建立queue consumer
    • 循環監聽獲取message: 獲取delivery.拿到message

exchange

接收消息,並根據routing key 轉發消息所綁定的隊列java

exchange屬性服務器

  • name 交換機名稱
  • type 交換機類型 direct、topic、fanout、headers
  • Durability 是否持久化
  • auto delete: 當最後一個綁定到exchange上的隊列刪除後,自動刪除該exchange
  • internal 是否用於rabbitmq內部使用,默認false。通常不改。
  • arguments 擴展參數。

default exchange

amqp.default routingKey爲queue name性能

The default exchange is implicitly bound to every queue, with a routing key equal to the queue name. It is not possible to explicitly bind to, or unbind from the default exchange. It also cannot be deleted.ui

direct exchange

全部發送到direct exchange的message 由routingkey轉發到指定 queue編碼

注意: Direct模式能夠使用Rabbitmq自帶的exchange:default exchange。因此不須要將exchange進行任何綁定操做,消息傳遞時,routingkey 必須徹底匹配纔會被隊列接收,不然該消息被拋棄。spa

routing key 不必定等於 queue name3d

topic exchange

全部發送到topic exchange的消息由routekey轉發到指定topic的queuecode

exchange將eouteKey和某topic進行模糊匹配,此時隊列須要綁定一個topic。cdn

模糊匹配:blog

'#' 匹配多個單詞 '*' 匹配一個單詞

fanout exchange

不處理任何routing key. 只須要將隊列綁定到交換機上,無論rk。

轉發最快,性能最好。

binding

exchange和exchange、queue之間的鏈接關係

binding中包含routing key 和其餘參數

queue

存儲消息數據

持久化

自動刪除

Message

服務器和應用程序之間傳送的數據

本質上是一段數據:Properties、Payload(Body)組成

經常使用屬性:delivery mode 、headers 自定義屬性 其餘屬性:content_type、content_encoding priority 其餘屬性:correlation_id reply_to expiration message_id

發送帶有附加屬性的message

Delivery Mode 2: 持久化投遞 1:非持久化投遞

Map<String, Object> headers = new HashMap<>();
		headers.put("my1", "111");
		headers.put("my2", "222");

AMQP.BasicProperties properties = new AMQP.BasicProperties.Builder()
				.deliveryMode(2) //持久化
				.contentEncoding("UTF-8")  //編碼方式
				.expiration("10000") //發送後10s自動清除
				.headers(headers) 
				.build();
複製代碼

virtual host

虛擬主機 用於進行邏輯隔離 最上層的消息路由

一個virtual host裏面能夠有若干個exchange queue

但不能用同名的exchange queue

相關文章
相關標籤/搜索