将RabbitMQ与节点集群一起使用,我设置了我的工厂和连接(使用.NET客户端):
var factory = new ConnectionFactory()
{
UserName = Properties.Settings.Default.RabbitMQUser,
Password = Properties.Settings.Default.RabbitMQPassword,
HostnameSelector = new RandomHostNameSelector(),
AutomaticRecoveryEnabled = true
};
connection = factory.CreateConnection(Properties.Settings.Default.RabbitMQServers.Split(';'));
Properties.Settings.Default.RabbitMQServers
使用以分号分隔的服务器列表:
clust01;clust02;clust03
连接后,有没有办法看到它实际选择了哪个主机,是否有办法检测何时可能发生变化(因为特定节点崩溃,停止或重新启动)? factory.HostName
只返回localhost
。
编辑:似乎connection.Endpoint.HostName
确实为您提供了实际的主机名@Evk和@wally都声明了(谢谢)。但有没有办法检测变化?似乎IConnection有一个ConnectionShutdown
事件我猜可能被称为切换主机的一部分,但是没有相应的启动或重启事件(所以我假设它还不知道新的主机。还有ConnectionBlocked
和ConnectionUnblocked
个事件,但它们没有记录,所以我不知道他们做了什么......
答案 0 :(得分:2)
那么如何获取您已经找到的主机名,以及如何检测它何时发生变化:当您为工厂设置AutomaticRecoveryEnabled
时,CreateConnection
将真正返回AutorecoveringConnection
的实例。此类实现特殊的IRecoverable
接口,该接口具有您需要的事件。因此,要检测何时发生自动恢复,请按以下方式订阅:
var connection = factory.CreateConnection();
((IRecoverable)connection).Recovery += (sender, args) =>
{
// recovery happened
};
答案 1 :(得分:1)
我没有一个可以测试它的环境,所以它可能完全错误。
看起来像,就像您可以使用NAME=Test TestPHONE_PASSWORD= 000CITY= testSTATE=
对象(endpoint
)返回的connection
:
IConnection