将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个队列时,它几乎立即启动。
任何有这种限制的想法以及如何避免它?
答案 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数据库中。