问题描述
我正在 Kubernetes 集群中运行队列触发的 Azure 函数。
有时,Azure Function 容器会在处理消息时停止执行。日志只显示 "Application is shutting down..."
。
我的目标是让当前的执行在函数关闭之前完成。有什么办法可以做到这一点吗?
解决方法
首先,第一步是得到函数即将被中止的通知。您可以使用 the CancellationToken:
函数可以接受 CancellationToken 参数,这使操作系统能够在函数即将终止时通知您的代码。您可以使用此通知来确保函数不会以导致数据处于不一致状态的方式意外终止。
现在您知道函数即将被中止,您可以对此做出反应。但是,you have just 10 seconds 之前的函数被中止。这样您就可以在有限的时间内完成消息处理。
一种选择是取消进一步处理并回滚任何更改,如果这比完成消息更快,那么该消息对于其他可以处理的实例再次可见。