`AmqpTemplate`的`RabbitTemplate`實現支持發布確認和返回。
為了返回消息,必須將模板的`mandatory`屬性設置為`true`,或者對于特定消息,`mandatory-expression`必須求值為`true`。 此功能需要將`CachingConnectionFactory`的`publisherReturns`屬性設置為true。 返回發送到客戶端,是通過調用`setReturnCallback(ReturnCallback callback)`注冊`RabbitTemplate.ReturnCallback`。 回調必須實現此方法:
~~~java
void returnedMessage(Message message, int replyCode, String replyText,
String exchange, String routingKey);
~~~
每個`RabbitTemplate`只支持一個`ReturnCallback`。 另請參閱“回復超時”一節。
* * * * *
對于發布確認(也稱為發布應答),模板需要一個將`publisherConfirms`屬性設置為`true`的`CachingConnectionFactory`。 通過調用`setConfirmCallback(ConfirmCallback callback)`注冊`RabbitTemplate.ConfirmCallback`,將確認發送給客戶端。 回調必須實現此方法:
~~~
void confirm(CorrelationData correlationData, boolean ack, String cause);
~~~
`CorrelationData`是客戶端在發送原始消息時提供的對象。 `ack`對于`ack`是真的而對于`nack`是假的。 對于`nack`,如果在生成nack時可用,則原因可能包含nack的原因。 一個例子是向不存在的交換機發送消息。 在這種情況下,代理關閉渠道; 關閉的原因包括在`cause`中。 `cause`在1.4版中添加。
一個`RabbitTemplate`僅支持一個`ConfirmCallback`。
>當rabbit 模板發送操作完成時,通道關閉;這在連接工廠緩存已滿的情況下將阻止接收確認或返回(當緩存中有空間時,通道未物理關閉且返回/確認將正常進行)。當緩存已滿時,框架將關閉延遲最多5秒,以便有時間接收確認/返回。使用確認時,收到最后確認時將關閉頻道。僅使用返回時,通道將保持打開整整5秒。通常建議將連接工廠的channelCacheSize設置為足夠大的值,以便將發布消息的通道返回到緩存而不是關閉。您可以使用RabbitMQ管理插件監控頻道使用情況;如果您看到頻道被快速打開/關閉,您應該考慮增加緩存大小以減少服務器上的開銷。
>
>使用默認的交換機是不支持發布的確認和返回的
- 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 接收消息
- 介紹
- 輪詢消費者
- 異步消費者