问题描述
我们在CloseAsync(PartitionContext,CloseReason)
中为IEventProcessor
方法实现了以下实现:
public async Task CloseAsync(PartitionContext context,CloseReason reason)
{
// log reason and partition id
if (reason == CloseReason.Shutdown)
{
// log shutdown event
await context.CheckpointAsync();
}
}
我们知道LeaseLost异常在此方法中很好,我们看到了以下线程:
Azure EventHub & Function LeaseLostException
What is causing Azure Event Hubs ReceiverDisconnectedException/LeaseLostException?
过去,当处理器关闭时,它在某些调用中失败,但在其他处理器上成功。
最近,我们注意到当原因为CloseAsync()
且总是完全相同的异常CloseReason.Shutdown
时,在对LeaseLostException
的所有调用中始终失败。这是完整的异常消息和堆栈跟踪:
消息:“指定的租约ID与Blob的租约ID不匹配。”
StackTrace:
Microsoft.Azure.EventHubs.Processor.AzureStorageCheckpointLeaseManager.UpdateLeaseCoreAsync(AzureBlobLease租约)上的在Microsoft.Azure.EventHubs.Processor.AzureStorageCheckpointLeaseManager.UpdateCheckpointAsync(租赁,检查点检查点)处 在Microsoft.Azure.EventHubs.Processor.PartitionContext.PersistCheckpointAsync(Checkpoint检查点) 在CloseAsync(PartitionContext上下文,CloseReason原因) 在Microsoft.Azure.EventHubs.Processor.PartitionPump.CloseAsync(CloseReason原因)
我们正在使用Microsoft.Azure.EventHubs v4.3.0和Microsoft.Azure.EventHubs.Processor v4.3.0
我们担心在这种情况下,不会写入任何检查点,并且由于无法保存最近的检查点位置,因此在处理器重新启动时将有很多重复项。 有没有办法了解导致故障的原因以及如何修复故障?