Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我如何知道我的消息已通过spring amqp成功发送?_Java_Spring_Rabbitmq_Amqp_Spring Amqp - Fatal编程技术网

Java 我如何知道我的消息已通过spring amqp成功发送?

Java 我如何知道我的消息已通过spring amqp成功发送?,java,spring,rabbitmq,amqp,spring-amqp,Java,Spring,Rabbitmq,Amqp,Spring Amqp,我正在用spring amqp使用RabbitTemplate类写入RabbitMQ队列。我使用convertAndSend方法向队列发送消息。这在正常情况下运行良好,但如果队列不存在,它似乎会无声地失败。不会引发异常,也不会向记录器记录错误/调试消息 对我来说,什么是确保信息传递的最佳方式 下面是代码当前正在执行的操作的示例 RabbitTemplate template = new RabbitTemplate(factory); template.setQueue(queueName);

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

对我来说,什么是确保信息传递的最佳方式

下面是代码当前正在执行的操作的示例

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

RabbitMQ客户机向代理发送消息并不是一个错误,因为代理中没有绑定队列来接受消息。RabbitMQ将悄悄地删除它,而客户端将不会更明智。如果您没有对消息感兴趣的队列,那么代理没有很多其他可用选项


也就是说,如果通过设置标志消息将以静默方式被丢弃,则可以让RabbitMQ抱怨。我不知道Spring AMQP接口是否支持它,但RabbitMQ Java客户端库中肯定提供了它。

您可以使用
强制
,还可以启用发布者返回(对于无法传递的消息)。

您绝对确定没有记录任何消息吗?你有没有试过在经纪人故意倒下的情况下进行单元测试?如果经纪人倒下,我对无声失败的看法是不正确的,如果经纪人倒下,我确实会收到一个未知的异常。我已经更新了问题。也就是说,如果队列不存在,我仍然不会收到任何异常或错误消息。您能在发送消息的地方发布代码片段吗?我添加了一个代码示例。我猜我必须注册某种类型的侦听器才能了解消息到底发生了什么,但我找不到任何支持这一点的信息。问题可能是RabbitMQ上的定义。您确定exchange、路由密钥和队列具有正确的绑定吗?您是如何进行此设置的?手工您可以使用Spring执行此操作,如果它退出,它将不会覆盖定义。我猜这个定义是错误的。谢谢,我会调查的。我明天会尽力去做的,我们现在很忙。我看不出有什么办法设置强制标志。我正在使用的spring amqp对象似乎都没有这样的设置。我认为我的问题是消息被认为已传递,因为它确实到达了交换。消息永远不会路由到队列,因为它不存在。rabbit中可能有一些配置需要设置,以确保消息不会丢失。没有类似的配置,AFAIK(除了强制标志)。如果您在Rabbit(或任何AMQP代理)中没有一个关心消息的队列绑定,那么您就是在含蓄地告诉代理您根本不关心消息,消息将永远消失;只有immediate标志不推荐使用,因为它已从rabbit客户端删除。