使用下面的方法發送消息
~~~java
void send(Message message) throws AmqpException;
void send(String routingKey, Message message) throws AmqpException;
void send(String exchange, String routingKey, Message message) throws AmqpException;
~~~
我們可以用上面列出的最后一種方法開始我們的討論,因為它實際上是最明確的。 它允許在運行時提供AMQP Exchange名稱以及路由鍵。 最后一個參數是負責實際創建Message實例的回調。 使用此方法發送消息的示例可能如下所示:
~~~
amqpTemplate.send("marketData.topic", "quotes.nasdaq.FOO",
new Message("12.34".getBytes(), someProperties));
~~~
如果您計劃使用該模板實例在大多數或所有時間發送到同一個交換機,則可以在模板上設置“exchange”屬性。 在這種情況下,可以使用上面列出的第二種方法。 以下示例在功能上等同于前一個示例:
~~~
amqpTemplate.setExchange("marketData.topic");
amqpTemplate.send("quotes.nasdaq.FOO", new Message("12.34".getBytes(), someProperties));
~~~
更好的思考交換機和路由鍵屬性的方法是顯式方法參數將始終覆蓋模板的默認值。實際上,即使您沒有在模板上顯式設置這些屬性,也始終存在默認值。在這兩種情況下,默認值都是空字符串,但這實際上是一個合理的默認值。就路由密鑰而言,首先并不總是必要的(例如扇出交換)。此外,可以使用空String將Queue綁定到Exchange。這些都是依賴于模板的路由鍵屬性的默認空String值的合法方案。就Exchange名稱而言,空字符串是非常常用的,因為AMQP規范將“默認Exchange”定義為沒有名稱。由于所有隊列都使用其名稱作為綁定值自動綁定到該默認Exchange(即Direct Exchange),因此上述第二種方法可用于通過默認Exchange對任何隊列進行簡單的點對點消息傳遞。只需通過在運行時提供method參數,將隊列名稱作為“routingKey”提供:
~~~
RabbitTemplate template = new RabbitTemplate(); // using default no-name Exchange
template.send("queue.helloWorld", new Message("Hello World".getBytes(), someProperties));
~~~
或者,如果您希望創建一個用于主要或專門發布到單個隊列的模板,則以下內容非常合理:
~~~
RabbitTemplate template = new RabbitTemplate(); //默認交換機,空名
template.setRoutingKey("queue.helloWorld"); //總是發布到此隊列
template.send(new Message("Hello World".getBytes(), someProperties));
~~~
- 1.前言
- 2.介紹
- 2.1 快速瀏覽
- 3.參考
- 3.1 使用spring amqp
- 3.1.1 AMQP抽象
- 3.1.2 資源的連接和管理
- 介紹
- 配置底層客戶端連接工廠
- RabbitConnectionFactoryBean和配置SSL
- 路由連接工廠
- 隊列親和力和LocalizedQueueConnectionFactory
- 發送確認和返回
- 3.1.3 添加自定義客戶端連接屬性
- 3.1.4 AmqpTemplate
- 介紹
- 添加重試功能
- 發送消息是異步的 - 如何檢測成功和失敗
- 發布的確認和返回
- 3.1.5 發送消息
- 介紹
- 消息構建 API
- 發布的返回
- 3.1.6 接收消息
- 介紹
- 輪詢消費者
- 異步消費者