Spring integration 当与代理的连接断开时,如何防止AMQP(RabbitMQ)消息被黑洞覆盖?

Spring integration 当与代理的连接断开时,如何防止AMQP(RabbitMQ)消息被黑洞覆盖?,spring-integration,spring-amqp,spring-rabbit,Spring Integration,Spring Amqp,Spring Rabbit,例如,如果出现网络中断,并且您的制作者与RabbitMQ断开的连接丢失,您如何防止需要排队的消息被隐藏?我有一些想法,其中之一是将您的所有消息写入本地数据库,并在确认后将其删除,并在一段时间后定期重新发送,但这只有在您的连接工厂设置为让发布者确认的情况下才有效 我只是从测试应用程序生成消息来模拟事件日志记录。我基本上是想创造一个持久的生产者。是否有方法检测何时也可以重新连接到RabbitMQ?我看到有一个ConnectionListener接口,但似乎无法发送消息来刷新ConnectionLis

例如,如果出现网络中断,并且您的制作者与RabbitMQ断开的连接丢失,您如何防止需要排队的消息被隐藏?我有一些想法,其中之一是将您的所有消息写入本地数据库,并在确认后将其删除,并在一段时间后定期重新发送,但这只有在您的连接工厂设置为让发布者确认的情况下才有效


我只是从测试应用程序生成消息来模拟事件日志记录。我基本上是想创造一个持久的生产者。是否有方法检测何时也可以重新连接到RabbitMQ?我看到有一个ConnectionListener接口,但似乎无法发送消息来刷新ConnectionListener中的内部队列

如果您有一个
SimpleMessageListenerContainer
(可能正在侦听虚拟队列),它将继续尝试重新连接(并在成功时触发连接侦听器)。或者您可以有一个简单的循环器,它可以不时在连接工厂上调用
createConnection()
(它不会每次创建新连接,只要返回单个共享连接(如果打开的话);这也会在建立新连接时触发侦听器


您可以使用事务而不是publisher confirms,但由于握手,它们的速度要慢得多。这取决于您的性能要求。

消息的来源是什么?我只是从测试应用程序生成消息来模拟事件日志记录。我基本上是想创造一个持久的生产者。是否有方法检测何时也可以重新连接到RabbitMQ?我看到有一个ConnectionListener接口,但您似乎无法发送消息来刷新ConnectionListener中的内部队列。谢谢!createConnection()上的活套对我来说非常有用。