共享预生产/生产环境下Azure Event Hubs的配置方案咨询
实现Azure App Service多槽全量消费Event Hubs消息的配置方案
问题根源
你当前的两个App Service槽(staging/production)使用了Event Hubs的默认消费者组($Default),同一消费者组内的多个消费者会被Event Hubs做负载均衡,消息会被分发到不同消费者,导致两个槽分摊消息而非全量消费。
解决步骤
要让两个槽各自消费全量消息,核心是给每个槽分配独立的消费者组:
创建独立消费者组
在Azure Portal的Event Hubs实例中,创建两个专属消费者组,比如命名为staging-group和production-group。每个消费者组会独立维护自己的消息偏移量,互不干扰。给不同槽配置对应消费者组
在App Service的staging槽和production槽的应用设置中,分别添加配置项(比如EventHub_ConsumerGroup),值对应各自的消费者组名称(staging槽设为staging-group,production槽设为production-group)。修改.NET代码指定消费者组
在初始化EventProcessorClient时,读取对应槽的配置项,使用指定的消费者组,而非默认的$Default:// 从应用配置读取当前槽对应的消费者组 string consumerGroupName = Configuration["EventHub_ConsumerGroup"] ?? "$Default"; // 初始化EventProcessorClient时指定消费者组 var eventProcessor = new EventProcessorClient( blobContainerClient, // 用于存储检查点的Blob容器客户端 consumerGroupName, Environment.GetEnvironmentVariable("EventHub_ConnectionString"), Environment.GetEnvironmentVariable("EventHub_Name") ); // 绑定事件处理逻辑 eventProcessor.ProcessEventAsync += ProcessReceivedEvent; eventProcessor.ProcessErrorAsync += ProcessProcessorError; await eventProcessor.StartProcessingAsync();
效果验证
配置完成后,staging和production槽会各自独立消费Event Hubs的全量消息,每个槽都能处理到所有的A、B、C消息,不会再出现消息被分摊的情况。
内容的提问来源于stack exchange,提问作者Mike-E
相关产品推荐
相关产品推荐

