MassTransit.RabbitMQ - 连接失败:经纪人无法访问

时间:2018-03-15 00:55:08

标签: rabbitmq masstransit

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

  

[20:51:06 ERR] RabbitMQ连接失败:代理无法访问:   客人@本地:5672 /测试

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开发版本启动这个非常小的应用程序需要更长的时间。但是,当我使用最新的稳定版4.0.1进行测试并尝试创建50个队列时,它几乎立即启动。

任何有这种限制的想法以及如何避免它?

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

失败:MassTransit [0] partners.moneytransfer | RabbitMQ连接失败: serviceUser @ rabbitmq:5672 /

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