从 Azure 事件中心监听时,我收到错误

问题描述 投票:0回答:2

从 Azure 事件中心监听时,我收到错误

提供的偏移量 XXXXX 无效。系统中的最后一个偏移量是 XXXXX

分区 1 上出现错误:AMQP 对象会话已中止。 分区 0 上的错误:提供的偏移量无效。

azure-eventhub
2个回答
0
投票

我也有同样的问题。这是因为共享 EventPosition 类的实例。

var position = EventPosition.FromStart();

var eventProcessorHost = new EventProcessorHost(
    eventHubName,
    consumerGroupName,
    eventHubConnectionString,
    storageConnectionString,
    LeaseContainerName);

host.RegisterEventProcessorFactoryAsync(
    processorFactory,
    new EventProcessorOptions
    {
        // Problem is the following line.
        // In order to fix it replace 'position' with 'EventPosition.FromStart()'
        InitialOffsetProvider = partitionId => position  
    }).Wait();

显然,如果共享位置类的实例,则 ProcessorHost 会对不同的 IEventProcessor 使用相同的对象。由于该对象包含偏移值,因此会导致将相同的偏移量传递到不同的分区 - 显然,如果分区之间的偏移量不同,则会导致问题。


0
投票

发生此问题的原因很可能是 eventhub 消费者/侦听器保持的索引与 eventhub 可以提供的索引不同步。

在我的例子中,eventhub 被重新创建,因此它自己的索引返回到 -1 或空,而连接到它的 azure 函数则期望以上的内容,例如1000。从 eventhub 的角度来看,这是一个明显的错误,因为它自己从未达到过这样的索引。

解决方案

重置azure函数保持连接到此eventhub的索引。

在云中运行时已解决此处检查偏移部分。

运行本地时
func start

这是我的情况。对于这样的本地开发环境,您需要连接到一个网络存储。这很容易通过

local.settings.json
:

来完成
{
  "Values": {
    ...
    "AzureWebJobsStorage": "UseDevelopmentStorage=true"
  }
}

并运行 azurite docker 镜像,如here:

$ docker pull mcr.microsoft.com/azure-storage/azurite

如果此设置发生这种情况,您应该使用终端进入 docker 容器并运行:

# rm -r /data/*

这将清除所有索引和以前的记录。肯定能解决问题。 但是如果您有兴趣保留其他订阅的记录,请小心使用它。

© www.soinside.com 2019 - 2024. All rights reserved.