Azure事件中心-顺序接收事件

时间:2019-06-12 06:41:09

标签: c# multithreading azure azure-eventhub

我正在使用以下代码从Azure Event-Hub接收事件

https://docs.microsoft.com/en-us/azure/event-hubs/event-hubs-dotnet-framework-getstarted-send#receive-events

我想按顺序处理进入事件中心的请求。例如,某人在很短的时间内发送了5个事件,我想完成请求1的处理,然后我要处理第二个请求。

如何依次处理进入事件中心的事件?

3 个答案:

答案 0 :(得分:1)

docs

为了使其具有顺序性,您需要选择适当的partitionKey

  

如果在发布事件时未指定分区键,则   使用循环分配。在许多情况下,使用分区键   如果事件排序很重要,则是一个不错的选择。当您使用   分区键,这些分区要求在单个节点上具有可用性,   随着时间的流逝可能会发生中断;例如,当计算节点   重新启动并打补丁。

答案 1 :(得分:0)

在从eventhub接收的事件捆绑中,有一个名为Get-WmiObject -Query 'SELECT * FROM Win32_NTLogEvent WHERE (SourceName = "Microsoft-Windows-Kernel-Power" and EventCode = "41")' | select -First 10 的属性,因为该捆绑是一个列表,您可以按sequence_number进行排序,然后处理这些事件。

答案 2 :(得分:0)

事件中心使用分区来启用事件处理的水平缩放。您可以在创建事件中心期间将分区数指定为1到32。仅保证在一个分区内而不是在所有分区之间保证消息顺序。

如果需要维护顺序,则仅需要将事件写入特定分区,而只能从同一分区读取。在Azure Event Hub中,分区跨不同实例分布以实现高可用性。这意味着分区可能会脱机进行维护,然后再联机。因此,如果要管理订单,则需要写入和读取单个分区,并且可能需要手动管理情况,例如分区从应用程序逻辑脱机。

如果需要管理订单,我建议使用Azure Service Bus队列,该订单和可用性由服务总线自行管理。