如何查看我们连接的主机

时间:2016-06-09 15:00:20

标签: c# rabbitmq

将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事件我猜可能被称为切换主机的一部分,但是没有相应的启动或重启事件(所以我假设它还不知道新的主机。还有ConnectionBlockedConnectionUnblocked个事件,但它们没有记录,所以我不知道他们做了什么......

2 个答案:

答案 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

引用:https://www.rabbitmq.com/releases/rabbitmq-dotnet-client/v1.4.0/rabbitmq-dotnet-client-1.4.0-net-2.0-htmldoc/type-RabbitMQ.Client.IConnection.html