`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 接收消息
- 介绍
- 轮询消费者
- 异步消费者