我使用RabbitMQ开发了一个非常简单的应用程序。一台机器,多个队列和交换,一台发布者和一台使用者。在进一步了解了Clustering和HA之后,我连接了第二台计算机以创建集群,此外我还对队列进行了镜像以拥有至少一个副本。现在,当我想将一些数据发布到队列中时,我将第一台计算机用作主机,并且可以正常工作,但是如果第一台未运行我的应用程序的计算机的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!
答案 0 :(得分:0)
当连接正常时,这些代码行是完美的,但是 假设在向交易所发布消息的过程中, 服务意外停止,然后在这种情况下首先停止 引发System.IO.FileLoadException,如果我继续执行 引发RabbitMQ.Client.Exceptions.AlreadyClosedException是 说:
您必须关闭通道和当前连接,并在每个中间回路中打开一个新的回路。那应该使用不同的连接。您只需在捕获到异常时执行此操作,而不必在循环的每次迭代中进行。
注意: RabbitMQ团队监视the rabbitmq-users
mailing list,并且有时仅在StackOverflow上回答问题。