我找到了这个宝石:
如果连接失败,客户端将需要与代理建立新连接.在先前连接上打开的任何频道都将自动关闭,这些频道也需要重新打开.
所以这不好.我即将编写一大堆处理自动重新连接并重新创建通道,然后从我的所有代码中封装这种情况.问题是,这应该已经完成了.这可能在Java RMQ库中吗?
也许这是RabbitMQ客户端的一个新功能,但我在他们的文档中发现了这一点:
要启用自动连接恢复,请使用factory.setAutomaticRecoveryEnabled(true):
https://www.rabbitmq.com/api-guide.html
看起来它应该解决问题.
是的,我同意这是当前 RabbitMQ 客户端实现的一个主要缺点。我使用 RMQ(.NET 库)已经有大约 2 年了,在那段时间里它没有太大变化。它需要从头开始完全重写,而我还没有时间这样做。
但我确实有一些指示。首先,我将为您的连接/通道对象创建一个包装类(您需要通道来执行 AMQP 操作,连接的唯一用途是创建通道)。然后,您的包装类可以跟踪通道或连接是否打开,并采取相应的行动。
我的代码最终看起来像这样:
while (_iNeedToBeSendingAndReceiving) {
try {
//This blocks indefinitely while waiting for a connection.
using (var channel = ConnectionWrapper.CreateChannel(string connectionString) {
//Do stuff, blah, blah
//When the connection or channel closes, an exception is thrown and
//I move to the catch block.
}
catch(ConnectionInterruptException ex) {
//Eat, yummy!
}
}
Run Code Online (Sandbox Code Playgroud)
我的最终计划是甚至将这些东西抽象出来,并创建一种与 RabbitMQ(或任何其他消息传递)库交互的全新方式。当我完成这方面的一些工作时,我会通知你,可能需要几个月的时间。
| 归档时间: |
|
| 查看次数: |
12085 次 |
| 最近记录: |