事件中心客户端与事件中心处理器之间有什么区别?



我发现有两种方法可以接收事件中心消息数据:

  1. 使用事件中心处理器,似乎将使用检查点进行保存。它将确保在特定分区上运行事件处理器的进程何时死亡/崩溃。
public class SimpleEventProcessor : IEventProcessor
{
public Task CloseAsync(PartitionContext context, CloseReason reason)
{
Console.WriteLine($"Processor Shutting Down. Partition '{context.PartitionId}', Reason: '{reason}'.");
return Task.CompletedTask;
}
public Task OpenAsync(PartitionContext context)
{
Console.WriteLine($"SimpleEventProcessor initialized. Partition: '{context.PartitionId}'");
return Task.CompletedTask;
}
public Task ProcessErrorAsync(PartitionContext context, Exception error)
{
Console.WriteLine($"Error on Partition: {context.PartitionId}, Error: {error.Message}");
return Task.CompletedTask;
}
public Task ProcessEventsAsync(PartitionContext context, IEnumerable<EventData> messages)
{
foreach (var eventData in messages)
{
var data = Encoding.UTF8.GetString(eventData.Body.Array, eventData.Body.Offset, eventData.Body.Count);
Console.WriteLine($"Message received. Partition: '{context.PartitionId}', Data: '{data}'");
}
return context.CheckpointAsync();
}
}
  1. 使用事件中心客户端接收消息:
EventHubClient eventHub
var reciever = eventHub.CreateReceiver("consumer1", "0", EventPosition.FromStart());
var recieved = await reciever.ReceiveAsync(10);

对他们来说有什么区别?我们可以将检查点留给第二种方式吗?如何以第二种方式处理坠机案件?为什么它需要两种不同的方式?

EventHubClient aka. 低级 API 用于构建连接器。在这种情况下,开发人员负责管理分区接收器、检查点、负载分配和崩溃恢复等。大多数人不会使用此 API 进行接收,同样,此 API 用于构建源到接收器连接器。

处理器主机带有内置的检查点、负载分配和分区接收器管理器。在实现IEventProcessor并提供存储检查点存储时,此API可能看起来有点矫枉过正,但从长远来看,它更省心。

最新更新