连续 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 事件中退出