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

如何在Azure函数中用Cosmos DB触发器恢复Azure Cosmos DB中断

曾华翰
2023-03-14

带有Cosmos DB触发器的Azure函数(v1)如何从Cosmos DB中断中恢复?这应该自动发生还是需要重新启动功能应用程序?

在我们的场景中,Cosmos DB不可用,因为已达到订阅开销限制。取消开销限制后,Cosmos DB再次可用,通过输出绑定写入Cosmos DB的函数也成功了。

Microsoft.Azure.WebJobs.Host.Listeners.FunctionListenerException: The listener for function 'xxx' was unable to start. ---> System.NullReferenceException: Object reference not set to an instance of an object.
   at Microsoft.Azure.Documents.ChangeFeedProcessor.ChangeFeedEventHost.<StartAsync>d__77.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.Azure.Documents.ChangeFeedProcessor.ChangeFeedEventHost.<RegisterObserverFactoryAsync>d__3.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.Azure.WebJobs.Extensions.DocumentDB.CosmosDBTriggerListener.<StartAsync>d__8.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.Azure.WebJobs.Host.Listeners.FunctionListener.<StartAsync>d__14.MoveNext()
   --- End of inner exception stack trace ---

我想,当Cosmos DB因其他原因中断时,这种情况也可能发生。

为了使我们的系统对Cosmos DB的临时中断具有弹性,我们如何使CosmosDB触发器返回操作状态?如果出现错误,我们必须重启功能应用程序还是有更好的方法?

共有1个答案

翟俊茂
2023-03-14

这是由于Azure Functions运行时中的重试机制和Cosmos DB触发器的问题造成的。

运行时一直试图重新初始化触发器,以指数级后退,但它在这个特定的场景中遇到了一个问题(帐户超过了支出限制)。这在Github的一期中被跟踪。

已经合并了一个修复程序,应该包含在运行库的下一个版本中。

当修复到位时,当帐户再次可用时,您应该不需要重新启动功能应用程序。

 类似资料:
  • 我已经创建了一个azure函数,当一个新文档被添加到一个集合中时,它会被触发。 是否可以从该集合中选择特定文档,然后查询所选文档中的数据? 例如,在所谓的募集服装,我有一个文件,有一个ID: 12345Tops.我想查询ID为:12345Tops的文档中找到的数据。 或者检索集合中的第一个文档,然后查询第一个选定文档 我看过带有http触发器的azure函数:https://docs.micros

  • 我正在尝试创建一个从Azure事件中心触发的Java Azure函数。下面是这些代码片段:https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-event-hubs-trigger?tabs=java#example 这是我的代码: 这是我在构建时遇到的错误: 我已经找了几个小时,一页又一页的谷歌搜索都筋

  • 我对Typescript和CosmosDB是新手,这可能是一个相当愚蠢的问题,然而,我在网上搜索了一整天,也找不到适合我的解决方案。希望有人愿意帮忙。 select似乎不是typescript中定义的函数,有人能帮忙吗?

  • 下面是我的function.json 有什么想法可以摆脱这个“exception:attributeError:module'azure.functions'没有属性'in'”错误吗?

  • 我将JSON文档上传到Azure Blob容器中,并编写了Azure Python函数将JSON写入CosmosDB。触发工作正常,但我出错了。下面是Python函数: 以下是function.json文件: 这是我在Azure门户中看到的错误: 结果:失败异常:函数加载错误:无法加载JsonBobTrigger1函数:以下参数在Python中声明,但在function.json中没有声明:{'d

  • 我是Azure Function应用程序中blob触发器的新手,需要一些帮助。我正在努力寻找有关如何重命名触发该函数的blob的资源。 我有一个函数应用程序,当一个新的blob被上传到容器时触发,文件被处理,我需要一种方法来将其“标记”为已处理,因此我想重命名blob。 这是我的职责: 我该如何重命名该文件?在这种情况下有可能吗?