MassTransit.RabbitMQ - 连接失败:代理无法访问

MassTransit.RabbitMQ - Connect Failed: Broker unreachable

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

而崩溃

[20:51:06 ERR] RabbitMQ Connect Failed: Broker unreachable: guest@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 个队列时,它几乎立即启动。

知道这个限制从何而来以及如何避免吗?

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

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

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

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

fail: MassTransit[0] partners.moneytransfer | RabbitMQ Connect Failed: serviceUser@rabbitmq:5672/

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