2011-12-11 71 views
6

我正在使用RabbitTemplate类写入使用spring amqp的RabbitMQ队列。我使用convertAndSend方法将消息发送到队列。这在正常情况下运行良好,但如果队列不存在,它似乎无声无息地失败。不会引发异常,也不会将错误/调试消息记录到记录器中。我如何知道我的消息是使用spring amqp成功发送的?

对于我来说,确保邮件传递的最佳方式是什么?

下面是当前代码正在执行的一个示例。

RabbitTemplate template = new RabbitTemplate(factory); 
template.setQueue(queueName); 
template.setRoutingKey(queueName); 
template.convertAndSend(message); 
+0

你确定没有信息记录?你是否曾经故意与经纪人进行单元测试? – artbristol

+0

如果代理关闭,我对沉默失败不正确,如果代理关闭,确实会收到UnknownHostException。我已经更新了这个问题。也就是说,如果队列不存在,我仍然不会收到任何异常或错误消息。 –

+0

你可以发布你发送消息的代码片段吗? – artbristol

回答

2

对于RabbitMQ客户端发送消息给未绑定队列来接受消息的代理,这并不是错误。 RabbitMQ将默默地放弃它,客户将不会更聪明。如果你没有对消息感兴趣的队列,经纪人还没有其他可用的选项。

这就是说,你可以让RabbitMQ抱怨,如果消息最终会通过设置mandatory标志而悄悄丢弃。我不知道Spring AMQP接口是否支持它,但它在RabbitMQ Java客户端库中肯定是可用的。

+0

谢谢,我会研究它。我明天会尽力去解决,现在我们很忙。 –

+0

我没有看到任何设置强制标志的方法。没有一个我正在使用的spring-amqp对象似乎具有该设置。 –

+0

我认为我的问题是该消息被视为已交付,因为它确实到达交易所。该消息只是从不路由到队列,因为它不存在。兔子中可能需要设置一些配置才能确保消息不会丢失。 –

1

您可以使用mandatory并启用发布商退货(对于无法投递的邮件)。

相关问题