Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.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 RabbitTemplate.send()是否保证将消息传递到RabbitMQ?_Java_Spring_Rabbitmq_Amqp_Spring Amqp - Fatal编程技术网

Java RabbitTemplate.send()是否保证将消息传递到RabbitMQ?

Java RabbitTemplate.send()是否保证将消息传递到RabbitMQ?,java,spring,rabbitmq,amqp,spring-amqp,Java,Spring,Rabbitmq,Amqp,Spring Amqp,使用Spring AMQP,当对方法rabbitmplate.send(message)的调用返回(从org.springframework.AMQP.rabbit.core.rabbitmplate类返回)时,我们可以确保消息已在RabbitMQ集群上传递和复制吗?更新:这不是正确答案。请参阅@GaryRussell的答案 如果您指的是发布者和RabbitMQ之间的唯一通信 那么是的。为了确保消息存储和复制是RabbitMQ工作的一部分,您不必做任何其他事情 如果发送消息时出现任何问题,请记住

使用Spring AMQP,当对方法
rabbitmplate.send(message)
的调用返回(从org.springframework.AMQP.rabbit.core.rabbitmplate类返回)时,我们可以确保消息已在RabbitMQ集群上传递和复制吗?

更新:这不是正确答案。请参阅@GaryRussell的答案

如果您指的是发布者和RabbitMQ之间的唯一通信 那么是的。为了确保消息存储和复制是RabbitMQ工作的一部分,您不必做任何其他事情


如果发送消息时出现任何问题,请记住
AmqpException
更新:这不是正确答案。请参阅@GaryRussell的答案

如果您指的是发布者和RabbitMQ之间的唯一通信 那么是的。为了确保消息存储和复制是RabbitMQ工作的一部分,您不必做任何其他事情


如果发送消息时出现任何问题,请记住
AmqpException

不,它不是。AMQP是一种异步协议。为了保证交付,您需要使用-即使这样,确认(或返回)也会在另一个线程上返回。

不,它不会。AMQP是一种异步协议。为了保证交付,您需要使用——即使这样,确认(或返回)也会在另一个线程上返回。

@GaryRussell我假设Sébastien是指发布者和RabbitMQ之间的通信。但如果他指的是订户,那么这是不正确的;即使在发布服务器端,当
send()
方法退出时,也不能保证消息已在目标队列中得到保护。他的问题是
我们能否确保消息已在RabbitMQ集群上传递和复制?
答案是响亮的否定-请看我的答案。好的。谢谢你的回答。我正在更新我的答案,以表明您的答案@GaryRussellYes我的意思是在发布者和RabbitMQ(兔子交换出版物)之间。我的测试证实没有交货保证。我将尝试Publisher确认并返回Gary提到的模式。@GaryRussell我假设Sébastien是指Publisher和RabbitMQ之间的通信。但如果他指的是订户,那么这是不正确的;即使在发布服务器端,当
send()
方法退出时,也不能保证消息已在目标队列中得到保护。他的问题是
我们能否确保消息已在RabbitMQ集群上传递和复制?
答案是响亮的否定-请看我的答案。好的。谢谢你的回答。我正在更新我的答案,以表明您的答案@GaryRussellYes我的意思是在发布者和RabbitMQ(兔子交换出版物)之间。我的测试证实没有交货保证。我将尝试Publisher确认并返回Gary提到的模式。@Gary Russel,出于好奇,如果我使用事务通道,当我提交时,如果这样的提交成功,我可以确定消息已送达吗?我的理解是,如果失败,则无法保证完全回滚(即,交换可能已成功地将消息传递给某些队列,但不是所有队列)。我的解释正确吗?通常最好问一个新问题,而不是在评论中添加问题。答案是,即使使用不可路由的消息和
强制
提交
也会成功,并且返回的消息会异步返回(在提交之后)。我不知道部分交付的行为,但文档中说“
在RabbitMQ中,tx.commit-ok表示所有事务效果都是可见的……代理已经接受了责任……
”。您应该在
RabbitMQ用户
Google组上询问有关RabbitMQ内部的问题,这是RabbitMQ工程师们常去的地方。如果发布到一个不存在的exchange,提交就会失败。@Gary Russel,出于好奇,如果我使用事务通道,当我提交时,如果这样的提交成功,我能确定消息已经传递了吗?我的理解是,如果失败,则无法保证完全回滚(即,交换可能已成功地将消息传递给某些队列,但不是所有队列)。我的解释正确吗?通常最好问一个新问题,而不是在评论中添加问题。答案是,即使使用不可路由的消息和
强制
提交
也会成功,并且返回的消息会异步返回(在提交之后)。我不知道部分交付的行为,但文档中说“
在RabbitMQ中,tx.commit-ok表示所有事务效果都是可见的……代理已经接受了责任……
”。您应该在
RabbitMQ用户
Google组上询问有关RabbitMQ内部的问题,这是RabbitMQ工程师经常出现的地方。如果发布到不存在的exchange,提交将失败。