C# 可以在RMQ.NET中指定多个连接点吗?
正如标题所述,我想为RMQ.NETC# 可以在RMQ.NET中指定多个连接点吗?,c#,rabbitmq,C#,Rabbitmq,正如标题所述,我想为RMQ.NETConnectionFactory提供多个URI,希望它能自动故障转移到第一个可用的URI,而不是局限于一个URI 设置 使用Docker Quickstart终端(Docker Toolbox的一部分),我创建了四个容器,每个容器都在RMQ实例上运行。 我对RMQ节点进行了如下集群: 下游(节点1和节点2) 上游(节点3和节点4) 下游节点与上游节点共享一个节点来增加吞吐量 使用 我用C语言编写了一个简单的控制台应用程序,它将生成消息并发布到node4(主
ConnectionFactory
提供多个URI,希望它能自动故障转移到第一个可用的URI,而不是局限于一个URI
设置
使用Docker Quickstart终端(Docker Toolbox的一部分),我创建了四个容器,每个容器都在RMQ实例上运行。
我对RMQ节点进行了如下集群:
- 下游(节点1和节点2)
- 上游(节点3和节点4)
自动恢复启用()和拓扑恢复启用()设置了标志,并设置了联合队列
但是,RMQ.NET库提供的ConnectionFactory
似乎不支持指定多个URI()。因此,我必须手动编写代码来处理节点停机时在节点之间切换的操作—我通过捕获节点不再可访问时引发的异常,然后ping所有节点以查看哪个节点处于活动状态
有没有一种方法可以为ConnectionFactory提供多个Rabbit端点,以便它能够自动故障切换?使用pivotal提供的C#客户端,没有。恐怕您必须完全按照您正在做的事情来做。如果您查看它,您可以创建一个与
将使用单个元素的列表调用CreateConnection({UriHostname})
如果您需要不同集群(不同的vhost、用户名、密码…)之间的连接列表,那么答案是否定的,那么您不能使用pivotal客户端来实现这一点。只要主机名改变,我就可以工作了 使用pivotal提供的C#客户端,不。恐怕您必须完全按照自己的方式进行操作。谢谢您的回答@chris.ellis。如果您想将此添加为答案本身,我很乐意将其标记为已接受。:-)感谢您的回答和示例@Nicolas,不幸的是,我需要在集群之间执行此操作。
/// <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();