c# - Masstransit 使用RabbitMQ 性能很慢?

标签 c# rabbitmq masstransit

我在没有 Masstransit 的情况下使用 RabbitMQ,每秒发送 10,000 条消息,并在 100 秒内发送一百万条消息。

但是在将 Masstransit 与 RabbitMQ 结合使用后,我的机器的性能非常低。

当发布/使用消息时,硬盘非常活跃(99% 使用率),此进程的 CPU 事件几乎为 0%。

当使用此代码运行发布者/订阅者控制台应用程序时:

var bus = ServiceBusFactory.New(x =>
{
    x.UseRabbitMq();
    x.ReceiveFrom("rabbitmq://localhost/Example_Hello");
});
var message = new MyMessage() { Text = "hello", When = DateTime.Now };
for (int i = 0; i < 100; i++)
{
    bus.Publish<MyMessage>(message, x => { });
}

6秒发布100条消息,不知道为什么很慢。


我机器的配置和软件版本是:

Windows 8.1 64 位

英特尔酷睿 i3 3.30GHz

内存 8GB


Visual Studio 2013 C#.Net 4.5.1

二郎 6.3

RabbitMQ 3.4.4

公共(public)交通 2.9.9

RabbitMQ.Client 3.4.0

最佳答案

这是因为在幕后,MassTransit 正在等待 RabbitMQ Ack 消息,确保它在返回给调用者之前被代理成功接受。如果没有这种等待,如果代理无法接收写入,则消息可能会丢失。

对于 MassTransit v3(目前处于预发布阶段),Publish 方法(以及所有 Send 方法)现在是异步的,返回一个 Task 可以等待(如果您不关心结果,也可以不等待)。

我可以为 .NET 4.0 开发人员添加 PublishAsync 方法到版本 2.9.9,事实上,这就是我最终可能会做的,作为仍在使用当前稳定版本的应用程序的临时解决方法。向 SendContext 添加 NoWait 选项也可能很有用,允许应用程序选择退出 Ack 等待行为。

老实说,在我的用例中,我更喜欢耐用性而不是性能。

关于c# - Masstransit 使用RabbitMQ 性能很慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29748448/

相关文章:

c# - dbType NVarChar 对于此构造函数无效

c# - 什么是 CLR 循环优化行为?

python - 错误消息 'No handlers could be found for logger "multiprocessing"' 使用 Celery

linux - rabbitMQ 没有消耗我的消息

asp.net - 在RabbitMq的消息监听器中获取queueName

Azure 服务总线性能问题 MassTransit

c# - 调试 ASP.NET 5 IIS Express 时无法查看变量的内容

c# - Mongodb - 从集合中检索 500 万条记录的最快方法

masstransit - MassTransit Automatonymous 传奇中的条件转换

c# - MassTransit 3 与 Azure 服务总线创建队列