.net - 受 PrefetchCount 影响的 Azure Servicebus 主题订阅竞争消费者

标签 .net azure servicebus azure-servicebus-topics

当将 Azure ServiceBus 主题订阅与多个竞争使用者结合使用时,我只能在未设置 SubscriptionClient 的 PrefetchCount 时让使用者进行循环。

当指定任何 PrefetchCount > 1 时,在低负载下,第一个恰好接收到消息的消费者似乎被赋予了与消息的亲和性,使得所有消息仅由该消费者接收。

如果我添加负载(即在订阅中同时抛出更多消息),那么其他消费者确实会收到一些消息,但负载分布不均匀。

使用队列(和 QueueClient),消息或多或少均匀地分发到客户端 - 具有任何 PrefetchCount。

注意:

  • MaxConcurrentCalls 是一个“高”值 (200)
  • 我在所有情况下都使用 PeekLock 模式;
  • 订阅使用 CorrelationFilter

这种主题订阅行为对我来说似乎不正确...我假设队列和订阅客户端竞争消费者机制应该是一致的。

我可能配置不正确?或者这是预期的行为?

最佳答案

队列和订阅都以相同的方式支持竞争消费者。预取是指未按您预期的方式工作。当您要求预取 N 个项目时,代理不会将这些项目平均分配给竞争的消费者。相反会尽力为每个消费者提供尽可能多的东西。因此,如果您有 10 条消息并将预取设置为 10,第一个消费者可能会获取全部消息,而第二个消费者则无需处理任何内容。

关于.net - 受 PrefetchCount 影响的 Azure Servicebus 主题订阅竞争消费者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59666477/

相关文章:

c# - 等待带有动态参数的方法时抛出异常(有时)

c# - 如何从 .NET 应用程序启动默认媒体播放器?

Azure 服务总线 BrokeredMessage 已被使用?

spring-boot - 控制Azure服务总线消息监听器在Spring Boot中启动或停止从主题或队列监听

c# - 无法将 REST API 用于 Windows Server 1.1(本地)的服务总线

c# - 在 C# 中过滤逗号分隔的字符串

c# - 是否可以在 Windows Azure 上指定时区?

Azure WebApp FTP 未更新

azure - ARM嵌套模板: _artifactLocation parameter is not populated correctly when deploying template with nested templates

Azure 搜索、listAdminKeys、ARM 输出错误(不支持 http 方法 'POST' )