我对RabbitMQ java客户端中连接的自动恢复感到有些困惑。
考虑以下代码
ConnectionFactory factory;
factory.setAutomaticRecoveryEnabled(true);
Connection connection = factory.newConnection();
Channel chan_obj = conn.createChannel();
根据RabbitMQ文档,如果连接断开,则自动恢复将重新创建连接,重新创建通道等。 当RabbitMQ自动恢复时,我真的很困惑如何处理'chan_obj'。 我很好奇恢复后从连接创建的'通道'是否可以与对象'chan_obj'一起使用 另一个问题是在恢复过程中,我是否会收到通道已关闭的通知,并希望其他通知如“通道可以再次使用”。
答案 0 :(得分:0)
Create a new channel, using an internally allocated
channel number. If automatic connection recovery is
enabled, the channel returned by this method will
be Recoverable.
答案 1 :(得分:0)
我很好奇从连接创建的“频道”是否在 恢复将可用于对象 'chan_obj'
是的,它会可用,但是直到恢复完成(通常需要几秒钟才能切换到活动的RabbitMQ节点),对chan_obj的操作可能会导致异常类似这样的文字:
The AMQP operation was interrupted: AMQP close-reason, initiated by Peer, code=320, text='CONNECTION_FORCED - broker forced connection closure with reason 'shutdown'', classId=0, methodId=0
。
另一个问题是在恢复过程中,我会得到任何 通知通道已关闭,并希望紧随其后 诸如“频道可以再次使用”之类的通知。
不确定它是否在 Java RabbitMQ 客户端库中实现,因为处理连接/通道故障的标准方法是实现重试逻辑(例如,尝试在通道上多次执行相同的操作,但有一些延迟)。>