Windows 上的 RabbitMQ 似乎限制了每个进程的连接创建
RabbitMQ on Windows seems to limit connection creation per process
我想了解我在使用以下代码时看到的行为。使用 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();
}
}
}
编辑:我知道这违反了关于“每个进程单个连接”的所有最佳实践。我只是好奇是什么限制了连接的创建,是否有任何设置可以控制这种行为。
.NET 客户端使用的 ThreadPool
可能没有足够的开箱即用线程。您需要增加可用数量:
在此处查看问题和讨论:
https://github.com/rabbitmq/rabbitmq-dotnet-client/search?q=threadpool
注意: RabbitMQ 团队监控 rabbitmq-users
mailing list 并且有时只在 Whosebug 上回答问题。
我想了解我在使用以下代码时看到的行为。使用 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();
}
}
}
编辑:我知道这违反了关于“每个进程单个连接”的所有最佳实践。我只是好奇是什么限制了连接的创建,是否有任何设置可以控制这种行为。
.NET 客户端使用的 ThreadPool
可能没有足够的开箱即用线程。您需要增加可用数量:
在此处查看问题和讨论:
https://github.com/rabbitmq/rabbitmq-dotnet-client/search?q=threadpool
注意: RabbitMQ 团队监控 rabbitmq-users
mailing list 并且有时只在 Whosebug 上回答问题。