正如标题所述,我希望为RMQ .NET ConnectionFactory提供多个URI,希望它将自动转到第一个可用URI,而不是局限于单个URI。
设置
使用终端( Docker的一部分),我创建了四个容器,每个容器都在RMQ实例上运行。我对RMQ节点进行了如下集群:
下游节点与上游节点共享一个联邦队列,以提高吞吐量。
使用
我用C#编写了一个简单的控制台应用程序,它将生成消息并将消息发布到node4 (主要的上游RMQ实例)。
我想测试我的RMQ配置的冗余/自动故障转移,因为我已经为AutomaticRecoveryEnabled(文档)和TopologyRecoveryEnabled(文档)设置了标志,并设置了联邦队列设置。
但是,RMQ .NET库提供的.NET似乎不支持指定多个URI (文档)。因此,在处理节点下降时切换时,我不得不手动编写代码--我通过捕获节点不再可访问时抛出的异常,然后点击所有节点来查看哪个节点处于活动状态。
是否有一种方法可以为ConnectionFactory提供多个兔子端点,使其能够自动进行故障转移?
发布于 2016-04-20 12:59:23
使用pivotal提供的C#客户端,no。恐怕你必须做你正在做的事情。
发布于 2016-04-20 14:07:06
如果您查看ConnectionFactory,它可以创建与主机列表的连接。
/// <summary>
/// Create a connection using a list of hostnames. The first reachable
/// hostname will be used initially. Subsequent hostname picks are determined
/// by the <see cref="IHostnameSelector" /> configured.
/// </summary>
/// <param name="hostnames">
/// List of hostnames to use for the initial
/// connection and recovery.
/// </param>
/// <returns>Open connection</returns>
/// <exception cref="BrokerUnreachableException">
/// When no hostname was reachable.
/// </exception>
public IConnection CreateConnection(IList<string> hostnames)
{
return CreateConnection(hostnames, null);
}顺便说一句,下面的代码:
ConnectionFactory factory = new ConnectionFactory();
factory.Uri = "amqp://user:pass@hostName:port/vhost";
IConnection conn = factory.CreateConnection();将使用单个元素列表调用CreateConnection({UriHostname})。
如果您需要一个不同集群之间的连接列表(不同的vhost、用户名、密码.),那么答案是否定的,所以不能用关键客户端这样做。只要主机名改变,我就可以工作了。
https://stackoverflow.com/questions/36683201
复制相似问题