1. 程式人生 > >RabbitMQ之Exchange交換機

RabbitMQ之Exchange交換機

RabbitMQ中的Exchange的作用

訊息佇列,訊息通過傳送和Exchange之後最終到達的地方,到達Queue的訊息及進入了等待消費的狀態。每個訊息都會被髮送到一個或多個佇列。

佇列的常用屬性
Name: 佇列的名稱
Durability: 是否需要持久化,true為持久化
Auto Delete: 當最後一個繫結到Exchange上的佇列刪除後,自動刪除該Exchange

Message-訊息

伺服器和應用程式之間傳送的資料

本質上就是一段資料,由Properties和Payload(Body)組成

Messsage中的常用屬性
Delivery Mode: 送達模式
headers:訊息的頭資訊
content_type: 內容的型別
content_encoding: 內容的編碼格式
priority: 訊息的優先順序 

correlation_id: 一般用作訊息的唯一Id來做
reply_to: 訊息失敗後可以返回到對應的哪個佇列中
expiration: 訊息的過期時間
message_id: 訊息的Id

# 自定義的資料型別
timestamp: 時間戳
type: 型別
user_id:
app_id:
cluster_id:




Message實際程式碼上手
   ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("114.67.224.231");
        connectionFactory.setUsername("guest");
        connectionFactory.setPassword("guest");
        connectionFactory.setVirtualHost("/");
        Connection connection = connectionFactory.newConnection();
        Channel channel = connection.createChannel();
        Map<String, Object> headers = new HashMap<>();
        headers.put("ocean0","1");
        headers.put("ocean1","2");
        AMQP.BasicProperties properties = new AMQP.BasicProperties.Builder()
                .deliveryMode(2)//設定訊息是否持久化 2:持久化 1:非持久化
                .contentEncoding("UTF-8")
                .expiration("15000") //過期時間 單位:毫秒
                .headers(headers) //headers中儲存的是自定義屬性
                .build();
        //通過channel通道來發送訊息
        String msg = "hello rabbitmq!";
        //注意:此時如果不指定交換機名稱,則預設走Default AMQP交換機進行路由
        channel.basicPublish("","test001",properties,msg.getBytes());
        //關閉連線
        channel.close();
        connection.close();
   
  

Message程式碼實現

Message中的Arguments屬性說明:

  • x-message-ttl: 釋出到佇列的訊息在丟棄之前可以存活多長時間(單位:毫秒)
  • x-expires: 在自動刪除佇列之前可以使用多長時間(單位:毫秒)
  • x-max-length: 在佇列開始從佇列中刪除之前,佇列可以包含多少(就緒)訊息(單位:個)
  • x-max-length-bytes: 佇列在開始從頭部刪除之前可以包含的就緒訊息的總體大小。)
  • x-overflow: 設定佇列溢位行為。這個決定了在達到佇列的最大長度是訊息會發生什麼。有效值為drop-headreject-publish
  • x-dead-lettler-exchange:如果傳送的訊息被拒絕或過期,將重新發布訊息的交換機的可選名稱。
  • x-dead-letter-routing-key: 當傳送的訊息無效時可選替換的路由金鑰。如果未設定,將使用訊息的原始Routing-key
  • x-max-priority: 設定佇列的最大優先順序數;如果未設定,則佇列將不支援訊息優先順序
  • x-queue-mode: 將佇列設定為延遲模式,在磁碟上保留儘可能多的訊息已減少RPM使用。如果未設定,佇列將保留記憶體快取已儘快傳遞訊息。 延遲模式。
  • x-queue-master-locator: 將佇列設定為主位置模式,確定在節點叢集上宣告時佇列主機所在的規則。