Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 可以在RMQ.NET中指定多个连接点吗?_C#_Rabbitmq - Fatal编程技术网

C# 可以在RMQ.NET中指定多个连接点吗?

C# 可以在RMQ.NET中指定多个连接点吗?,c#,rabbitmq,C#,Rabbitmq,正如标题所述,我想为RMQ.NETConnectionFactory提供多个URI,希望它能自动故障转移到第一个可用的URI,而不是局限于一个URI 设置 使用Docker Quickstart终端(Docker Toolbox的一部分),我创建了四个容器,每个容器都在RMQ实例上运行。 我对RMQ节点进行了如下集群: 下游(节点1和节点2) 上游(节点3和节点4) 下游节点与上游节点共享一个节点来增加吞吐量 使用 我用C语言编写了一个简单的控制台应用程序,它将生成消息并发布到node4(主

正如标题所述,我想为RMQ.NET
ConnectionFactory
提供多个URI,希望它能自动故障转移到第一个可用的URI,而不是局限于一个URI

设置

使用Docker Quickstart终端(Docker Toolbox的一部分),我创建了四个容器,每个容器都在RMQ实例上运行。 我对RMQ节点进行了如下集群:

  • 下游(节点1和节点2)
  • 上游(节点3和节点4)
下游节点与上游节点共享一个节点来增加吞吐量

使用

我用C语言编写了一个简单的控制台应用程序,它将生成消息并发布到node4(主要的上游RMQ实例)

我想测试RMQ配置的冗余/自动故障切换,因为我已经为
自动恢复启用
()和
拓扑恢复启用
()设置了标志,并设置了联合队列

但是,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();