c# - 是否可以在 RMQ .NET 中指定多个连接点?

标签 c# rabbitmq

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

设置

使用 Docker Quickstart Terminal(Docker 工具箱的一部分)我创建了四个容器,每个容器都在 RMQ 实例上运行. 我按如下方式对 RMQ 节点进行了集群:

  • 下游(node1 和 node2)
  • 上游(node3 和 node4)

下游 节点共享一个 Federated Queue上游节点一起增加吞吐量。

使用

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

我想测试我的 RMQ 配置的冗余/自动故障转移,因为我已经为 AutomaticRecoveryEnabled( docs ) 和 TopologyRecoveryEnabled( docs 设置了标志) 并设置联合队列

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

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

最佳答案

如果你看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:pass@hostName:port/vhost";
IConnection conn = factory.CreateConnection();

将使用单个元素列表调用 CreateConnection({UriHostname})

如果您需要不同集群(不同的虚拟主机、用户名、密码...)之间的连接列表,那么答案是否定的,您不能使用关键客户端来做到这一点。如果仅更改主机名,我可能会工作。

关于c# - 是否可以在 RMQ .NET 中指定多个连接点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36683201/

相关文章:

c# - native 类是否可以使用 .NET 事件?

node.js - 相互通信微服务 - 如何?

python - Celery + RabbitMQ 结果后端 + WebSockets?

linux - RabbitMQ 加载页面时出现问题(连接重置错误 header GET/FAV)

c# - RabbitMQ 公开的公钥中包含的证书链

c# - try catch 文本框中输入的特定字符

c# - 在读取全局字符串之前锁定?

javascript - 在nodejs上延迟消息rabbitmq

c# - 通用 Windows 应用程序与 .NET Framework 版本之间的关系

c# - 使用 c# Xdocument 类添加子节点