例如,如果网络中断并且您的生产者失去与您的 RabbitMQ 的连接中断,您如何防止需要排队的消息成为黑洞?我有一些想法,其中一个是将所有消息写入本地数据库并在它们被确认后将其删除,并在一段时间后定期重新发送,但这仅在您的连接工厂设置为让发布者确认时才有效。
问问题
224 次
1 回答
2
我只是从我的测试应用程序生成消息来模拟事件日志记录。我本质上是在尝试创建一个耐用的生产者。有没有办法检测何时可以重新连接到 RabbitMQ?我看到有一个 ConnectionListener 接口,但您似乎无法发送消息以刷新 ConnectionListener 中的内部队列。
如果您有一个SimpleMessageListenerContainer
(可能正在侦听一个虚拟队列),它将继续尝试重新连接(并在成功时触发连接侦听器)。createConnection()
或者你可以有一个简单的循环器,不时调用连接工厂(它不会每次都创建新连接,只需返回单个共享连接 - 如果打开);当建立新连接时,这也会触发侦听器。
您可以使用事务而不是发布者确认 - 但由于握手,它们要慢得多。这取决于您的性能要求。
于 2015-04-01T08:32:42.450 回答