我在没有 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/