Azure服务总线-多个订阅者不会收到所有消息

时间:2019-04-25 13:19:12

标签: azure azureservicebus

我正在使用代码实现Azure服务总线主题,可以在这里找到: https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-dotnet-how-to-use-topics-subscriptions

我尝试运行两个包含以下方法的订户程序实例:

private static void RegisterOnMessageHandlerAndReceiveMessages()
{
    var messageHandlerOptions = new MessageHandlerOptions(ExceptionReceivedHandler)
    {
        MaxConcurrentCalls = 1,
        AutoComplete = false
    };
    _subscriptionClient.RegisterMessageHandler(ProcessMessagesAsync, messageHandlerOptions);
}

private static async Task ProcessMessagesAsync(Message message, CancellationToken token)
{
    Console.WriteLine($"Received #{message.SystemProperties.SequenceNumber} message: {Encoding.UTF8.GetString(message.Body)}");
    await _subscriptionClient.CompleteAsync(message.SystemProperties.LockToken);
}

enter image description here

但是,这不允许两个订阅者都接收消息,而是在每个订阅者中均收到一条消息。

如何确保两个订户都收到来自总线的所有消息?

1 个答案:

答案 0 :(得分:2)

Azure Service Bus在检索消息时是Competing Consumer pattern的代理。这是预期的行为。您这里拥有一个向外扩展的处理端点,两个端点都在尝试处理来自同一订阅的消息。消息分布在这两个竞争的使用者之间。如果需要将同一条消息分发给多个订阅者,则应该创建和收听不同的订阅实体。