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

时间:2019-01-01 14:48:52

标签: c# rabbitmq

我使用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关闭原因,由Peer启动,代码= 320,文本=“ CONNECTION_FORCED-代理强制关闭,原因为'shutdown'”,classId = 0,methidId = 0,原因=

我认为在发布消息期间关闭连接时,必须有一种更改主机的方法,但是怎么没有IDEA!

1 个答案:

答案 0 :(得分:0)

  

当连接正常时,这些代码行是完美的,但是   假设在向交易所发布消息的过程中,   服务意外停止,然后在这种情况下首先停止   引发System.IO.FileLoadException,如果我继续执行   引发RabbitMQ.Client.Exceptions.AlreadyClosedException是   说:

您必须关闭通道和当前连接,并在每个中间回路中打开一个新的回路。那应该使用不同的连接。您只需在捕获到异常时执行此操作,而不必在循环的每次迭代中进行。


注意: RabbitMQ团队监视the rabbitmq-users mailing list,并且有时仅在StackOverflow上回答问题。