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 数据库。
将 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 数据库。