当与代理的连接断开时,如何防止 AMQP (RabbitMQ) 消息被黑洞?
How to prevent AMQP (RabbitMQ) message from being black holed when the connection to the broker dies?
例如,如果出现网络中断并且您的生产者失去与您的 RabbitMQ 的连接中断,您如何防止需要排队的消息被黑洞?我有一些想法,其中之一是将所有消息写入本地数据库,并在它们被确认后将其删除,并在一段时间后定期重新发送,但这只有在您的连接工厂设置为让发布者确认时才有效。
I'm just generating messages from my test application to simulate event logging. I'm essentially trying to create a durable producer. Is there a way to detect when you can reconnect to RabbitMQ also? I see there's a ConnectionListener interface, but it seems you cannot send messages to flush an internal queue in the ConnectionListener.
如果您有一个 SimpleMessageListenerContainer
(可能正在侦听虚拟队列),它将继续尝试重新连接(并在成功时触发连接侦听器)。或者你可以有一个简单的循环器,它不时地在连接工厂上调用 createConnection()
(它不会每次都创建一个新连接,只是 return 单个共享连接 - 如果打开) ;这也会在建立新连接时触发侦听器。
您可以使用事务而不是发布者确认 - 但由于握手,它们要慢得多。这取决于您的性能要求。
例如,如果出现网络中断并且您的生产者失去与您的 RabbitMQ 的连接中断,您如何防止需要排队的消息被黑洞?我有一些想法,其中之一是将所有消息写入本地数据库,并在它们被确认后将其删除,并在一段时间后定期重新发送,但这只有在您的连接工厂设置为让发布者确认时才有效。
I'm just generating messages from my test application to simulate event logging. I'm essentially trying to create a durable producer. Is there a way to detect when you can reconnect to RabbitMQ also? I see there's a ConnectionListener interface, but it seems you cannot send messages to flush an internal queue in the ConnectionListener.
如果您有一个 SimpleMessageListenerContainer
(可能正在侦听虚拟队列),它将继续尝试重新连接(并在成功时触发连接侦听器)。或者你可以有一个简单的循环器,它不时地在连接工厂上调用 createConnection()
(它不会每次都创建一个新连接,只是 return 单个共享连接 - 如果打开) ;这也会在建立新连接时触发侦听器。
您可以使用事务而不是发布者确认 - 但由于握手,它们要慢得多。这取决于您的性能要求。