Azure事件中心-IEventProcessor的CloseAsync中的LeaseLostException

问题描述

我们在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

我们担心在这种情况下,不会写入任何检查点,并且由于无法保存最近的检查点位置,因此在处理器重新启动时将有很多重复项。 有没有办法了解导致故障的原因以及如何修复故障?

解决方法

很抱歉遇到麻烦。修复程序将在本周的4.3.1版本中发布。

,

Jesse Squire在评论中提到。 这是由于Microsoft.Azure.EventHubs.Processor v4.3.0中的bug。 它已修复here,但尚未发布。