RabbitMQ知識點整理10-傳送訊息
如果要傳送一個訊息,可以使用Channel 類的basicPublish 方法,比如傳送一條內容為"Hello World! "的訊息,參考如下:
byte[] messageBodyBytes = "Hello,world! ". getBytes(); channel.basicPublish(exchangeName , routingKey , null , messageBodyBytes);
為了更好地控制傳送,可以使用mandatory 這個引數, 或者可以傳送一些特定屬性的資訊:
channel.basicPub1ish(exchangeName, routingngKey, mandatory, MessageProperties.PERSISTENT_TEXT_PLAIN, messageBodyBytes) ;
上面這行程式碼傳送了一條訊息,這條訊息的投遞模式( delivery mode ) 設直為2 ,即訊息會被持久化(即存入磁碟)在伺服器中。同時這條訊息的優先順序( priority )設定為1 , content-type為" text/plain" 。可以自己設定訊息的屬性:
channe1.basicPub1ish(exchangeName, routingKey , new AMQP.BasicProperties.Builder() .contentType("text/plain") .deliveryMode(2) .priority(1) .userId("hidden") .build()), messageBodyBytes) ;
也可以傳送一條帶有headers 的訊息:
Map<String, Object> headers = new HashMap<>() ; headers.put("loca1tion", "here"); headers.put("time", "today"); channe1.basicPublish(exchangeName,routingKey , new AMQP.BasicProperties.Builder() .headers(headers) .build()) , messageBodyBytes) ;
還可以傳送一條帶有過期時間(expiration ) 的訊息:
channe1 . basicPub1ish(exchangeName, routingKey, new AMQP.BasicProperties.Bui1der() .expiration("60000") .build()) , messageBodyBytes);
以上只是舉例,由於篇幅關係,這裡就不一一列舉所有的可能情形了。對於basicPublish而言,有幾個過載方法:
1.void basicPublish(String exchange, String routingKey, BasicProperties props, byte[] body) throws IOException; 2.void basicPublish(String exchange, String routingKey, boolean mandatory, BasicProperties props, byte[] body) throws IOException; 3.void basicPublish(String exchange, String routingKey, boolean mandatory, boolean immediate, BasicProperties props, byte[] body) throws IOException;
對應的具體引數解釋如下所述:
exchange: 交換器的名稱,指明訊息需要傳送到哪個交換器中。如果設定為空字串,則訊息會被髮送到RabbitMQ 預設的交換器中。
routingKey: 路由鍵,交換器根據路由鍵將訊息儲存到相應的佇列之中。
props:訊息的基本屬性集,其包含14 個屬性成員,分別有contentType 、contentEncoding 、headers ( Map<String , Object>) 、deliveryMode 、priority 、correlationId 、replyTo 、expiration 、messageld、timestamp 、type 、userld 、appld、clusterld。其中常用的幾種都在上面的示例中進行了演示。
body:訊息體( payload ) ,真正需要傳送的訊息。
mandatory 和 immediate 的詳細內容會在後面說到