gpt4 book ai didi

c# - 如何使用 RabbitMQ 主机列表连接参数

转载 作者:行者123 更新时间:2023-11-30 16:49:20 29 4
gpt4 key购买 nike

我正在尝试使用 IList<string>在 C# rabbitMQ 库中创建连接时的参数:

IConnection CreateConnection(IList hostnames)

我的代码如下:

    private IConnection CreateConnection()
{
var connectionFactory = new ConnectionFactory
{
UserName = _userName,
Password = _password,
VirtualHost = _vhost,
AutomaticRecoveryEnabled = DEFAULT_AUTO_RECOVER,
RequestedHeartbeat = HEARTBEAT_TIMEOUT_SECONDS,
Port = AmqpTcpEndpoint.UseDefaultPort,
};
// _hosts contains valid IPs "###.###.###.###"
return connectionFactory.CreateConnection(_hosts);
}

但不管我对 hosts 的看法如何它似乎无法连接的参数(我得到“指定的端点均不可到达”)

即使我的列表只包含一个元素。

现在,如果我像这样使用单一主机实现,它会正常工作:

    private IConnection CreateConnection()
{
var connectionFactory = new ConnectionFactory
{
UserName = _userName,
Password = _password,
VirtualHost = _vhost,
AutomaticRecoveryEnabled = DEFAULT_AUTO_RECOVER,
RequestedHeartbeat = HEARTBEAT_TIMEOUT_SECONDS,
Port = AmqpTcpEndpoint.UseDefaultPort,
HostName = _hosts.First() // or just one string
};
return connectionFactory.CreateConnection();
}

我知道 RabbitMQ 建议不要在客户端上存储主机集,但我只是想让他们提供的方法起作用。

最佳答案

我认为您可能需要为连接工厂的 HostnameSelector 属性设置一个值

private IConnection CreateConnection()
{
var connectionFactory = new ConnectionFactory
{
UserName = _userName,
Password = _password,
VirtualHost = _vhost,
AutomaticRecoveryEnabled = DEFAULT_AUTO_RECOVER,
RequestedHeartbeat = HEARTBEAT_TIMEOUT_SECONDS,
Port = AmqpTcpEndpoint.UseDefaultPort,
HostnameSelector = new RandomHostnameSelector()
};
// _hosts contains valid IPs "###.###.###.###"
return connectionFactory.CreateConnection(_hosts);
}

RabbitMQ 提供了一个RandomHostnameSelector

class RandomHostnameSelector : IHostnameSelector
{
string IHostnameSelector.NextFrom(IList<string> options)
{
return options.RandomItem();
}
}

或者您可以创建自己的 IHostnameSelector 实现以拥有自己的主机选择策略。

关于c# - 如何使用 RabbitMQ 主机列表连接参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36849789/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com