Azure服务总线性能问题MassTransit



所以我一直在玩MassTransit和Azure Service Bus Premium,下面是我的一个消费者的示例。假设一个发布者的初始负载大约是每秒1000条消息。然而,每当我尝试配置消费者时,它似乎通常平均每个循环大约有20-40条消息。

cfg.ReceiveEndpoint("ReceivePoint", e =>{
e.PrefetchCount = 500;
e.MaxConcurrentCalls = 20;
e.Batch<IBlahContract>(b => {
b.MessageLimit = 500;
b.TimeLimit = TimeSpan.FromSeconds(1);
b.Consumer(() => new BatchBlahConsumer(provider.GetRequiredService<IRepository>(), provider.GetRequiredService<ILogger<BatchBlahConsumer>>()));
});
});

我确实尝试过吞吐量测试,它每秒管理一千多条消息。有人知道如何实现最佳性能吗?考虑RabbitMq的托管实例是否更有意义,因为这需要扩展?感觉Azure服务总线真的不适合这么高的吞吐量?

编辑:除此之外,怀疑这与将预取保持在20左右的要求有关,然后消费者并发才是真正定义性能的因素。因此,基本上,它需要根据估计的需求进行消费者级别的配置。这会让我更倾向于使用兔子。

您的批处理消息限制是500,这确实太高了。将MaxConcurrentCalls设置为20时,您将始终达到超时而不是批处理大小限制,因为Azure客户端库一次只能传递20条消息,并且批处理大小明显高于该值(500比20(。您需要将其设置得足够高,使其能够完成一个批次,否则您将始终在超时时完成该批次。

降低批处理大小,并增加MaxConncurrentCalls,使它们相同,或者至少使批处理大小小于并发调用限制,以便在收到消息时完成批处理,而不是等待超时。

最新更新