我一直在尝试使用Spring AMQP。我有几个问题:
我想知道Publisher返回的内容以及它与Publisher Confirm的不同之处。根据我的理解,我们有一个发布者确认回调,用于检查确认状态。现在我查看了Spring AMQP和Rabbit MQ中的文档。没有真正发现或理解这一点。
为什么如果尝试将邮件发送到不存在的队列,我也不会得到任何形式的确认(ack / nack) 我也没有任何错误。有没有办法为非确认设置timeTime?
答案 0 :(得分:0)
我建议你阅读this文章。可以很好地描述所有可能的确认方案,包括返回,用于未路由的消息,例如您不存在的队列。
从Spring AMQP的角度来看,你应该记住:https://docs.spring.io/spring-amqp/docs/2.0.3.RELEASE/reference/html/_reference.html#template-confirms
此功能需要将
CachingConnectionFactory
属性设置为publisherReturns
的{{1}}。
答案 1 :(得分:0)
链接https://www.rabbitmq.com/confirms.html的简短回答:
"对于不可路由的消息,一旦交换机验证了一条消息不会路由到任何队列(返回一个空的队列列表),代理就会发出确认。如果消息也作为必需消息发布,则basic.return将在basic.ack之前发送给客户端。"
在Spring AMQP中,如果你设置了spring.rabbitmq.publisherReturns'如果这是真的,这将意味着消息将是强制性的' (因为以下代码,除非您将强制设置为false):
private boolean determineMandatoryFlag() {
Boolean mandatory = this.properties.getTemplate().getMandatory();
return (mandatory != null ? mandatory : this.properties.isPublisherReturns());
}