首页 > 解决方案 > RabbitMqHostConfigurator UseCluster 方法不起作用

问题描述

我在 Amazon EC2 上设置了 RMQ 集群。现在,当我尝试通过设置集群成员来创建 RabbitMQ 主机时,每次都会收到Broker Unreachable异常。但是,如果我评论 UseCluster 方法,事情就会开始正常工作。但在这种情况下,我无法享受集群的全部好处。以下是我正在使用的一段代码:

foreach(var server in servers)
{
  try
  {
    var bus = Bus.Factory.CreateUsingRabbitMq(cfg =>
    {
      var host = cfg.Host(new Uri(server), hst =>
      {
        hst.Username(settings.UserName);
        hst.Password(settings.Password);
        hst.UseCluster(c =>
        {
          c.ClusterMembers = servers;
        });
      });
      //Check if the connection is reachable
      host.Settings.GetConnectionFactory().CreateConnection();
      registrationAction?.Invoke(cfg, host);
    });
    AddBusToContainer(container, bus);
    return bus;
  }
  catch (BrokerUnreachableException ex)
  {
    EventLog.WriteEntry($"Error trying to connect to {server}", $"{ex}", EventLogEntryType.Error);
    continue;
  }
}

在上面的代码中,如果我注释 UseCluster 实现,我就能够成功地测试连接。但是我收到了带有上述代码的 BrokerUnreachableException 。

有谁知道在创建 MassTransit 总线时如何配置 RMQ 集群?这将非常有帮助。

提前致谢。

标签: c#.netrabbitmqmasstransit

解决方案


要配置集群,您应该只配置一个总线实例(在您的示例中配置多个)。我不知道您使用的是什么版本的 MassTransit(鉴于语法,它看起来更旧),但如果您手动编码总线,这代表了当前的方法。

var bus = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
    cfg.Host("cluster", hst =>
    {
        hst.Username(settings.UserName);
        hst.Password(settings.Password);
        
        hst.UseCluster(c =>
        {
            foreach(var server in servers)
                c.Node(server);
        });
    });

    registrationAction?.Invoke(cfg);
});

AddBusToContainer(container, bus);

return bus;

虽然我建议在您的容器中使用较新的语法,以确保正确注册组件。

container.AddMassTransit(x =>
{
    x.UsingRabbitMq(cfg =>
    {
        cfg.Host("cluster", hst =>
        {
            hst.Username(settings.UserName);
            hst.Password(settings.Password);

            hst.UseCluster(c =>
            {
                foreach(var server in servers)
                    c.Node(server);
            });
        });

        registrationAction?.Invoke(cfg);
    });
})

推荐阅读