【问题标题】:RabbitMQ cluster connection using MassTransit gives BrokerUnreachableException使用 MassTransit 的 RabbitMQ 集群连接给出 BrokerUnreachableException
【发布时间】:2019-05-10 08:58:08
【问题描述】:

我遇到了这个人遇到的完全相同的问题:https://github.com/MassTransit/MassTransit/issues/975。

出于测试目的,我的开发机器上有一个 3 节点集群,节点使用以下端口:

amqp rabbit 5672
http rabbit 15672

amqp rabbit1 6001
http rabbit1 15674

amqp rabbit2 6002
http rabbit2 15673


我尝试如下连接:

var rabbitMqHost = busFactoryConfig.Host(new Uri("rabbitmq://localhost:6002"), hostConfig =>
{
  hostConfig.Username("username");
  hostConfig.Password("password");
  hostConfig.UseCluster(c =>
  {
    c.ClusterMembers = new[]
    {
      "rabbitmq://localhost:6001",
      "rabbitmq://localhost:6002",
      "rabbitmq://localhost:5672"
    };
  });
});

但我不断得到:

连接失败:admin@localhost:6002/

BrokerUnreachableException:指定的端点都不可到达

尝试了所有可能,没有任何效果。如果我删除 UseCluster,那么相同的主机:端口可以工作,这很奇怪。

使用集群名作为主机名(例如:busFactoryConfig.Host("rabbit2@{hostname-fqdn}", "/", ...)会出现以下错误:

EndpointNotFoundException:找不到指定地址的主机:rabbitmq://rabbit2@{hostname-fqdn}/bus-{hostname}-RabbitMQConsumer-rnuoyyrtr44jcxutbdmpkkikdu?durable=false&autodelete=true

RabbitMQ v3.7.14、Erlang v21.3

【问题讨论】:

    标签: c# rabbitmq masstransit


    【解决方案1】:

    我认为我在尝试 1000 次后解决了我的问题,如下所示:

    var rabbitMqHost = busFactoryConfig.Host(new Uri("rabbitmq://rabbit2/"), hostConfig =>
    {
        hostConfig.Username("username");
        hostConfig.Password("password");
        hostConfig.UseCluster(c =>
        {
            c.Node("rabbit");
            c.Node("rabbit1");
            c.Node("rabbit2");
        });
    });
    

    我在主机文件中添加了以下内容:

    127.0.0.1 rabbit2
    

    但它仍然与端口混淆(因为所有节点都是本地主机)......所以仍然没有成功。

    【讨论】:

      【解决方案2】:

      尝试在 CreateConnection 上指定 AddressFamily 属性。

       var factory = new RabbitMQ.Client.ConnectionFactory
      {
          UserName = "username",
          Password = "password"
      };
      var conn  = factory.CreateConnection(new [] { new AmqpTcpEndpoint("hostname") {AddressFamily = AddressFamily.InterNetwork}});
      

      【讨论】:

      • 你的答案,但我想知道MassTransit的方法
      【解决方案3】:

      好的,我知道了。

      创建rabbitMqHost后试试这个

      var rabbitMqHost = busFactoryConfig.Host(new Uri("rabbitmq://rabbit2/"), hostConfig =>
      {
          hostConfig.Username("username");
          hostConfig.Password("password");
          hostConfig.UseCluster(c =>
          {
              c.Node("rabbit");
              c.Node("rabbit1");
              c.Node("rabbit2");
          });
      });
      
      rabbitMqHost.Settings.GetConnectionFactory().Endpoint.AddressFamily = AddressFamily.InterNetwork;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-29
        • 2017-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多