1. 程式人生 > 實用技巧 >RabbitMQ知識點整理10-傳送訊息

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 的詳細內容會在後面說到