Azure事件中心中的并行处理(同一分区上的多个使用者)

cclgggtu  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(94)

Azure Event Hubs允许在使用者组内进行分区。在我的示例中,我有两个使用者,它们使用不同的逻辑发送通知。我需要在消费者内部决定应用哪个逻辑,因此每个事件都应该被两个应用程序捕获,然后根据事件数据决定正确的逻辑。最初,我只有一个消费者,并决定在该消费者中应用什么逻辑,因为未来将有超过2种处理方法,但我被指示为每种处理方法有多个消费者,这不是最佳的,甚至在只有一个消费者群体的大规模下也无法实现。当我启动两个消费者时,它们在不同的分区中侦听,每个消费者只捕获一个事件,因此我不能保证我将对事件应用正确的逻辑,因为它不会被两个应用程序消费。理想情况下,我应该有两个消费者组,但我使用的是Basic层,它只允许一个。然而,在微软的文档中,它声明为“There can be at most 5 concurrent readers on a partition per consumer group”,据我所知,如果两个读者都在同一个分区中侦听,他们都会捕获所有事件。我试着在我的EventProcessorClient中设置分区,但我没有找到任何这样做的方法。是否有任何方法可以定义从消费者中读取哪个分区,或者是否有其他方法可以在多个消费者中处理同一事件?

vzgqcmou

vzgqcmou1#

感谢@Jesse Squire的评论。根据此MSDOC,创建消费者组是合理划分受众的最佳方法,这样他们只能看到他们感兴趣的事件,我们无法指定向指定的消费者组发送/接收哪个消息。

  • 一个使用MSDOC源代码的EventProcessorClient示例。
string connectionString = "Endpoint=sb://sampath123.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=c";
        string hubName = "sampath";       
        string message = "   ";
        await using (var producerClient = new EventHubProducerClient(connectionString, hubName))
        {
            try
            {
              using EventDataBatch eventBatch = await producerClient.CreateBatchAsync();
               if(!eventBatch.TryAdd(new EventData(Encoding.UTF8.GetBytes(message))))
                {
                    throw new Exception("The message is too large for the batch and cannot be sent.");
                }
                 await producerClient.SendAsync(eventBatch);

字符串
x1c 0d1x的数据

  • 有关从Event HubSO发送和阅读的信息,请参阅本文档。

相关问题