我想理解我在下面的代码中看到的行为。使用RabbitMQ.Client库版本6.2.2.
**预期行为:**快速创建连接,过程不会变慢。
**实际行为:**前6个连接创建得很快,之后速度明显减慢,连接一个接一个地创建(间隔1秒)。
注意:多次启动程序会显示类似的行为。这让我相信瓶颈是每个进程,而不是RabbitMQ或系统资源。
注2:系统资源不是瓶颈(AFAIK)。
有人知道是什么导致了观察到的行为吗?RabbitMQ安装在Windows 10上,具有默认设置。
using RabbitMQ.Client;
using System;
namespace ConsoleApp1
{
internal class Program
{
static void Main(string[] args)
{
for (int i = 0; i < 50; i++)
{
var factory = new ConnectionFactory() { HostName = "localhost" };
var connection = factory.CreateConnection();
var channel1 = connection.CreateModel();
var channel2 = connection.CreateModel();
Console.WriteLine(i);
}
Console.ReadLine();
}
}
}
编辑:我知道这违反了关于“每个进程单个连接”的每一个最佳实践。我只是好奇是什么限制了连接的创建,以及是否有任何设置可以控制这种行为。
1条答案
按热度按时间rjee0c151#
.NET客户端使用
ThreadPool
,它可能没有足够的开箱即用线程。你需要增加可用的数量:https://github.com/rabbitmq/rabbitmq-dotnet-client/blob/main/projects/TestApplications/MassPublish/Program.cs#L21
问题和讨论在这里:
https://github.com/rabbitmq/rabbitmq-dotnet-client/search?q=threadpool