2016-04-17 33 views
4

作为标题状态,我想为RMQ .NET ConnectionFactory提供多个URI,希望它能自动故障切换到第一个可用的URI,而不是仅限于一个URI。是否可以在RMQ .NET中指定多个连接点?

设置

使用泊坞快速入门终端(的泊坞窗工具箱一部分)我已经创建四个集装箱,每个都有它在其上运行RMQ实例。 我已经聚集了RMQ节点如下:

  • 下游(节点1和节点)
  • 上游(节点3和节点4)

下游节点与上游共享Federated Queue节点来增加吞吐量。

使用

我已用C#编写一个简单的控制台应用程序,将产生和消息发布到节点4(初级上游RMQ实例)。

我想测试我RMQ配置的冗余/自动故障转移,因为我已经设置标志为AutomaticRecoveryEnableddocs)和TopologyRecoveryEnableddocs)和具有联合队列设置。

但是,由RMQ .NET库提供的ConnectionFactory似乎不支持指定多个URI(docs)。所以我不得不手动编写处理节点间切换的处理过程 - 我通过捕获节点不再可访问时抛出的异常,然后ping所有节点以查看哪个节点处于活动状态来执行此操作。

有没有办法给ConnectionFactory多个Rabbit端点,以便它可以自动进行故障转移?

+1

使用由关键提供的C#客户端,你将不得不做你害怕的事情。 –

+0

谢谢你的答案@ chris.ellis。如果您想将其作为答案本身,我很乐意将其标记为已接受。 :-) –

+0

不用担心,对不起,这不是一个更有帮助的。 –

回答

1

使用由关键提供的C#客户端,你将不得不做你害怕的事情。

2

如果你看看ConnectionFactory它可以创建一个list of hosts

/// <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:[email protected]:port/vhost"; 
IConnection conn = factory.CreateConnection(); 

会打电话的CreateConnection({UriHostname})单元素

列表

如果你需要不同群集(不同的虚拟主机,用户名,密码......)之间的连接列表,所以答案是否定的,哟你不能与关键客户做到这一点。如果只有主机名更改,我可能会工作。

+0

感谢您的答案和例子@Nicolas,不幸的是我需要这种情况发生在集群之间。 –

相关问题