發布消息是一種異步機制,默認情況下,RabbitMQ只刪除無法路由的消息。 要成功發布,您可以收到異步確認,如下面的“發布者確認和返回”一節中所述。 讓我們考慮兩種失敗情況:
* 發布到交換機但沒有匹配的目標隊列
* 發布到不存在的交換機
第一種情況由發布者返回涵蓋,如下面的“發布者確認和返回”一節中所述。
對于第二種情況,消息被刪除,不生成返回; 底層渠道因例外而關閉。 默認情況下,會記錄此異常,但您可以使用`CachingConnectionFactory`注冊`ChannelListener`以獲取此類事件的通知:
~~~java
this.connectionFactory.addConnectionListener(new ConnectionListener() {
@Override
public void onCreate(Connection connection) {
}
@Override
public void onShutDown(ShutdownSignalException signal) {
//您可以檢查signal的reason屬性以確定發生的問題。
}
});
~~~
要檢測發送線程上的異常,可以在RabbitTemplate上設置setChannelTransacted(true),并在txCommit()上檢測異常。 但是,事務會嚴重影響性能,因此在為這一個用例啟用事務之前請仔細考慮這一點。
- 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 接收消息
- 介紹
- 輪詢消費者
- 異步消費者