当前位置: 首页 > 知识库问答 >
问题:

Cosmos数据库更改提要触发Azure函数:租约丢失异常

孔阳炎
2023-03-14

下面是Cosmos数据库更改提要触发器azure函数的应用程序洞察记录的异常:

Cosmos数据库更改提要触发Azure功能:

public static class NotificationChangeFeed
    {
        [FunctionName(nameof(NotificationChangeFeed))]
        public static async Task Run([CosmosDBTrigger(
            databaseName: CosmosDBConstants.DataBaseName,
            collectionName: CosmosDBConstants.NotificationContainer,
            ConnectionStringSetting = CosmosDBConstants.ConnectionStringName,
            CreateLeaseCollectionIfNotExists = true,
            LeaseCollectionName = CosmosDBConstants.LeaseConainer)]IReadOnlyList<Document> input,
            [Inject] ILoggingService loggingService,
            [Inject] IEmailProcessor emailProcessor)
        {
            var logger = new Logger(loggingService);

            try
            {
                if (input != null && input.Count > 0)
                {
                    foreach (Document document in input)
                    {
                        string requestBody = document.ToString();
                        var notification = requestBody.AsPoco<Notification>();

                        await emailProcessor.HandleEmailAsync(notification, logger);
                        logger.Info($"Email Notification sent successfully for file name: {document.Id}");
                    }
                }
            }
            catch (Exception ex)
            {
                logger.Error($"Unable to process Documents for Email Notification for Files: {input?.Count}", ex,
                    nameof(NotificationChangeFeed));
                throw;
            }
        }
    }

共有1个答案

田权
2023-03-14

此错误意味着租约丢失,这通常在它被其他主机占用时发生。其他情况:通信失败、达到重试次数、未找到租约。

  • 处理租约的首选方法是使用自动租约检查点实现(如果您使用的是手动检查点)。
  • 还可以检查租约收集是否存在。
 类似资料:
  • 我正在编写一些代码,使用Cosmos作为我的存储来实现事件源。我的初始文档成功写入集合。然后,我设置了一个Azure函数,该函数在该集合的提要发生变化时触发,并将项目复制到另一个集合。 我的问题是,虽然如果我在本地调试函数应用程序,这一切都可以正常工作(更改通过并无问题地处理),但函数在作为函数应用程序发布后不会触发。该函数存在,但总执行计数始终为0。就像该函数没有在计时器上运行并检查提要。我的函

  • 我最近开始使用Azure CosmosDB和函数。在阅读文档 https://docs.microsoft.com/pl-pl/azure/cosmos-db/change-feed-processor 时,我发现了一些对我来说很难理解的东西。是否真的可以在许多函数之间共享更改源,以便它们将由一个相同的数据库操作触发?什么是租约收集,它解决了什么问题。租赁的目的是什么?我想对这些术语进行基本解释。

  • 我们正在使用Cosmos DB更改提要来解决我们的一些需求。想了解是否有任何重试机制在更改提要可用。例如,如果我得到一批10个文件,第三个由于某种原因无法处理,我是否可以只重放第三个消息? 有三种消耗更改提要的方式:

  • 我有以下要求,我想从cosmosDB捕获记录,并将其推送到博客存储。 我已经用azure函数cosmos DB trigger解决了上面的问题(它将捕获对cosmos DB容器中的记录所做的任何更改)。 如何捕捉满负荷? 要求是我必须从cosmos DB容器中获取所有记录并将其推送到博客存储。 所以问题是cosmosDB触发器只有在记录有一定变化时才捕获,那么我该如何实现这个满载。 对于满载,我还

  • 我只需要在更新容器中的所有4行时运行函数。我还没有在网上找到任何关于这是否可能的信息。如果你能告诉我这是否可能,如果可能的话,怎么做,那就太好了。

  • 因此function.json如下所示: javascript中的http触发器在函数中的作用如下:,但是绑定到输入会导致错误,“property not defined”,那么如何在同一个函数中使用http触发器输入从json数据包中获取一个值来查询第一个输入中的cosmos db呢?