0

Azure ServiceBus 队列/订阅的竞争消费者是否意味着循环?

我正在循环回到我不久前提出的一个问题,并进行了更多测试。

在那里,我了解到一个正的PrefetchCount导致一个客户端对所有消息具有亲和力(除非负载增加到足以使该客户端忙于处理所有事情)。

实际上,看起来将 SubscriptionClient 设置为 MaxConcurrentCalls1 以外的任何值都会导致只有一个客户端在低负载下接收所有消息。

设置MaxConcurrentCalls = 1突然导致替代消息发送给竞争消费者。(请注意,我PrefetchCount在这里根本没有设置 a )

这是预期的吗?我们正在向外扩展,我需要一个客户端来同时处理多条消息,但是 90% 的时间,只有一个服务实例在处理所有事情......其他都是空闲的。

FWIW,这是Github上基于股票标准 MS文档的示例项目

4

1 回答 1

0

当设置MaxConcurrentCalls为没有预取 ( PrefetchCount) 的单个消息时,您要求代理仅向请求消费者提供单个消息。假设 broker 上有多条消息,每个消费者将得到一条消息来处理,并在前一条消息完成后接收另一条消息,依此类推。根据延迟和处理速度,消息将在消费者请求时分发给消费者。不会有关联或循环分配。先到先得是正在发生的事情。

这是预期的吗?

是的。

我们正在向外扩展,我需要一个客户端来同时处理多条消息,但是 90% 的时间,只有一个服务实例在处理所有事情......其他都是空闲的。

设置PrefetchCount并且MaxConcurrentCalls不太贪婪会给您一些分布,但是如果您正在寻找消费者实例之间的均匀分布,那将不会发生。在您提到的帖子中已经回答了这一点。

于 2020-05-31T00:37:36.687 回答