在发布和更改主机RabbitMQ中检测丢失的连接

pdsfdshx  于 2023-10-20  发布在  RabbitMQ
关注(0)|答案(1)|浏览(126)

我使用RabbitMQ开发了一个非常简单的应用程序。一台机器,多个队列和交换,一个发布者和一个消费者。在阅读了更多关于ClusteringHA的内容后,我连接了第二台机器来创建一个集群,此外,我还镜像了队列,使其至少有一个副本。现在,当我想将一些数据发布到队列中时,我使用第一台机器作为我的主机,它工作正常,但如果第一台机器的RabbitMQ服务没有运行我的应用程序,则会崩溃。
我的问题是如何知道哪台机器是建立连接,以及如何改变主机,而发布消息?

更新

我使用一个CreateConnection重载来传递所有主机以创建连接。好的,这将解决查找可用机器以创建连接的问题。但是第二个问题还是存在的,看看下面的代码:

for(int i = 0, i < 300, i++){
    var message = string.Format("Message #{0}: {1}", i, Guid.NewGuid());
    var messageBodyTypes = Encoding.UTF8.GetBytes(message);
    channel.BasicPublish(ExchangeName, "123456", null, messageBodyBytes);
}

当连接正常时,这几行代码可以完美工作,但是假设在向交换机发布消息的过程中,服务意外停止,那么在这种情况下,首先引发System.IO.FileLoadException,如果我继续执行RabbitMQ.Client.Exceptions.AlreadyClosedException,它会说:
已关闭:AMQP操作中断:AMQP关闭原因,由对等方发起,code=320,text=“CONNECTION_FORCED - broker强制连接关闭,原因为'shutdown'”,classId=0,methidId=0,原因=
我想一定有办法在发布消息时关闭连接时更改主机,但是怎么做,没有主意!

eyh26e7m

eyh26e7m1#

当连接正常时,这些代码行可以完美工作,但假设在向交换机发布消息的过程中,服务意外停止,那么在这种情况下,首先引发System.IO.FileLoadException,如果我继续执行RabbitMQ.Client.AlreadyClosedException,则会引发:
您必须关闭通道和当前连接,并为每个中间循环打开一个新的连接。它应该使用不同的连接。你只需要在异常被捕获时这样做,而不是在循环的每次迭代中。

相关问题