两个Azure事件中心使用者是否会收到相同的通知?

两个Azure事件中心使用者是否会收到相同的通知?,azure,azure-eventhub,asp.net-core-3.0,.net-core-3.0,Azure,Azure Eventhub,Asp.net Core 3.0,.net Core 3.0,我正在开发一个Azure IoT web应用程序,它使用Azure事件中心的事件。我定期在测试环境中将web应用程序发布到Azure,然后在自己的机器上以调试模式运行它,当这种情况发生时,实际上有两个web应用程序同时运行,它们是事件中心的使用者 我想知道一个消费者是否会“吞下”一个通知,这样另一个消费者就不会得到它。这将很糟糕,我必须为调试本地机器设置一个单独的事件中心 事件中心的两个使用者是否都会收到所有通知 我没有以任何特殊方式设置事件中心或消费者代码。消费者代码使用的是Azure.Mes

我正在开发一个Azure IoT web应用程序,它使用Azure事件中心的事件。我定期在测试环境中将web应用程序发布到Azure,然后在自己的机器上以调试模式运行它,当这种情况发生时,实际上有两个web应用程序同时运行,它们是事件中心的使用者

我想知道一个消费者是否会“吞下”一个通知,这样另一个消费者就不会得到它。这将很糟糕,我必须为调试本地机器设置一个单独的事件中心

事件中心的两个使用者是否都会收到所有通知

我没有以任何特殊方式设置事件中心或消费者代码。消费者代码使用的是
Azure.Messaging.EventHubs.EventProcessorClient
,其
ProcessEventAsync()
如下所示:

async Task ProcessEventHandler(ProcessEventArgs eventArgs)
{
    string deviceId = eventArgs.Data.Properties["deviceId"].ToString();
    string message = Encoding.UTF8.GetString(eventArgs.Data.Body.Span);
    await ProxyMessageToController(deviceId, message);

    
    await eventArgs.UpdateCheckpointAsync(eventArgs.CancellationToken);
}

EventHubProcessorClient
将确保在创建处理器时指定的使用者组范围内,给定分区只有一个活动读卡器。只要读取事件中心的每个
EventHubProcessorClient
都使用相同的使用者组,它们就不会同时从同一分区进行主动读取

重要的是要知道,
EventProcessorClient
与其他处理器协调以在它们之间分配负载。当一个处理器从其他处理器“窃取”分区的所有权时,您可能会看到两个处理器都读取了相同事件的重叠。这种重叠通常是一个很小的时间窗口,但在某种程度上取决于检查点策略。在启动新处理器时,您很可能会看到分区所有权发生变化,直到所有分区都均匀分布


另一个警告是Event Hubs服务有至少一次的交付保证。尽管很少,但事件可能会被复制,尽管它们只发布了一次。

非常感谢。如果我理解正确,我最好为a)我的调试环境和b)公司测试环境设置一个单独的事件中心(和IoT中心,它将设备的两项更改路由到事件中心)?我这样问是因为每一个新的Azure资源都要花费我公司的钱。我绝对不建议将生产数据与事件中心范围内的任何其他内容混合。作为流媒体平台,事件中心分区中的事件是持久的,这意味着在读取时不会删除它们。流一直存在,直到事件早于配置的保留期限(即使如此,也不能保证它们何时被清除)。如果成本是一个约束,那么在一个事件中心命名空间下有多个事件中心实例是值得考虑的。吞吐量单元是在名称空间级别计费的,您将拥有相同的进入流量,因此我不相信在同一名称空间下使用多个事件中心会带来额外的成本。有关更多上下文: