【问题标题】:MassTransit.RabbitMQ - Connect Failed: Broker unreachableMassTransit.RabbitMQ - 连接失败:代理无法访问
【发布时间】:2018-03-15 00:55:08
【问题描述】:

将 MassTransit 软件包更新到最新版本 (4.1.0.1426-develop) 后,我在注册超过 26 个队列时遇到问题。例如,下面的代码会因错误而崩溃

[20:51:06 ERR] RabbitMQ 连接失败:代理无法访问: 来宾@localhost:5672/test

static void Main(string[] args)
{
    var builder = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json", true, true);

    var configuration = builder.Build();

    Log.Logger = new LoggerConfiguration()
        .MinimumLevel.Debug()
        .WriteTo.Console()
        .ReadFrom.Configuration(configuration)
        .CreateLogger();

    Log.Information("Starting Receiver...");

    var services = new ServiceCollection();

    services.AddSingleton(context => Bus.Factory.CreateUsingRabbitMq(x =>
    {
        IRabbitMqHost host = x.Host(new Uri("rabbitmq://guest:guest@localhost:5672/test"), h => { });

        for (var i = 0; i < 27; i++)
        {
            x.ReceiveEndpoint(host, $"receiver_queue{i}", e =>
            {
                e.Consumer<TestHandler>();
            });
        }

        x.UseSerilog();
    }));

    var container = services.BuildServiceProvider();

    var busControl = container.GetRequiredService<IBusControl>();

    busControl.Start();

    Log.Information("Receiver started...");
}

所以,它不能注册 27 个队列。但是,如果我将数字减少到 26,它会起作用 :)

如果我将 MT NuGet 包降级到最新的稳定 4.0.1 版本,它可以完美运行,我最多可以注册 50 个队列。

另外,另一个观察结果 - 对于 4.1.0.1426-develop 版本,启动这个非常小的应用程序需要更长的时间。但是,当我使用最新的稳定版 4.0.1 对其进行测试并尝试创建 50 个队列时,它几乎立即启动。

有什么想法来自哪里以及如何避免它?

【问题讨论】:

  • 我建议在 Github 上创建一个复制存储库并在 MT 存储库中打开一个问题。
  • 是的,这很奇怪。我想知道为什么它会做这样的事情。也许对 Task.WhenAll 的限制?嗯。
  • 我按照@Alexey Zimarev 的建议在github.com/MassTransit/MassTransit/issues/1078 打开了问题

标签: rabbitmq masstransit


【解决方案1】:

感谢您打开问题,这有助于跟踪它。

另外,它现在似乎已修复。 netcoreapp2.0 程序堆栈(可能还有 TaskScheduler)如何导致它长时间延迟 RabbitMQ.Client 中的 Connect 方法存在问题。我认为这是一个 TPL/线程问题,连接没有被安排超过 15 秒,之后它立即完成。

将其移入 Task.Factory.StartNew()(在 MT 代码深处)似乎已将问题修复到它不会失败的地方,并且它会立即执行。

【讨论】:

  • 非常感谢您的快速修复!
【解决方案2】:

我知道这已被标记为已解决,但我遇到了类似的问题。

失败:MassTransit[0] partners.moneytransfer | RabbitMQ 连接失败: 服务用户@rabbitmq:5672/

我能够解决的唯一方法是,将用户添加到 rabbitmq 数据库,其用户名和密码在总线配置中指定。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    • 2021-08-22
    • 2015-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多