发布消息是一种异步机制,默认情况下,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 接收消息
- 介绍
- 轮询消费者
- 异步消费者