连续 WebJobs 和 CancellationToken

Posted

技术标签:

【中文标题】连续 WebJobs 和 CancellationToken【英文标题】:Continuous WebJobs and CancellationToken 【发布时间】:2016-04-04 09:57:13 【问题描述】:

我不了解取消令牌和网络作业背后的机制。

我知道我可以使用Microsoft.Azure.WebJobs.WebJobsShutdownWatcher().Token 获取令牌并对token.IsCancellationRequested 做出反应,例如当WebJobs 更新时。

场景: 连续作业,由服务总线消息触发。 该作业在我的数据层中调用了一个方法。 此方法对 azure sql 数据库上的不同表进行一些更新。此方法运行大约两分钟。

现在我将令牌传递给数据层,在那里我可以在不请求取消的情况下完成我的工作;否则我会结束我的更新。

现在的问题:

作业主机是否会等待我的方法,直到它完成然后停止?

我是否必须将“stopping_wait_time”设置为一个足够高的值(默认值是多少?)以确保我的工作正确完成?

如果一条新消息被写入服务总线队列,尽管取消处于待处理状态,这条消息是否会触发一个新作业?

感谢您的澄清!

【问题讨论】:

【参考方案1】:

不,WebJob 运行时不会等待您的方法完成。您可以使用 WebJobShutdownWatcher 检索的取消令牌仅允许通知您 Web 作业正在停止。它只是让您的代码有一点时间正常关闭。

连续网络作业的默认等待时间为 5 秒,但您可以按照您的建议使用“stopping_wait_time”设置增加它。

就我所见,如果您的网络作业正在停止,它不再接受新的消息触发器,直到它重新启动。但我在文档中没有找到任何证实这一点的内容。

此处描述了 webjobs 的正常关闭:https://github.com/projectkudu/kudu/wiki/Web-Jobs

希望这会有所帮助,

朱利安

【讨论】:

感谢您的帮助,您确认了我的模糊理解。 不客气!您对这个主题还有其他问题吗?如果没有,您能否将问题标记为已回答,以便其他用户知道答案可用:) thx ! 请注意,您无需创建自己的WebJobsShutdownWatcher。 SDK 会自动为您执行此操作。您可以简单地将CancellationToken 添加到您的函数签名中 - 运行时传递给您的函数的令牌来自一个链接的令牌源,该令牌源也在监视关闭文件。有关 SDK 优雅关闭的更多信息here 您可以找到完整的 WebJobs SDK 正常关闭和 CancellationToken 处理示例here。它展示了如何为您的作业配置 stopping_wait_time 值以及如何监控 CancellationToken 以进行取消。

以上是关于连续 WebJobs 和 CancellationToken的主要内容,如果未能解决你的问题,请参考以下文章

Azure WebJobs 在监控多个队列时如何对消息进行优先级排序?

B. Array Cancellation1000 / 思维 贪心

2022-12-11:行程和用户。以下为输出结果,请问sql语句如何写? +------------+-------------------+ | Day | Cancellation

如何使 Backgroundworker 中的进程在 Cancellation Pending 事件中退出

异常 Microsoft.Azure.WebJobs.Script.Workers.Rpc.RpcException

回声消除(Acoustic Echo Cancellation)中遇到的几个常见问题思考