多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
`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管理插件监控频道使用情况;如果您看到频道被快速打开/关闭,您应该考虑增加缓存大小以减少服务器上的开销。 > >使用默认的交换机是不支持发布的确认和返回的