Azure触发的Webjob - 检测webjob何时停止

时间:2016-02-02 23:47:47

标签: azure azure-webjobs azure-webjobssdk

我正在开发一个使用TimerTrigger的触发式webjob。

在webjob停止之前,我需要处理一些对象,但我不知道如何触发" webjob stop"。

拥有NoAutomaticTrigger函数,我知道我可以使用WebJobsShutdownWatcher类来处理webjob何时停止但是触发的作业需要一些帮助......

我看了Extensible Triggers and Binders with Azure WebJobs SDK 1.1.0-alpha1

在webjob停止之前创建使用WebJobsShutdownWatcher类来触发操作的自定义触发器(StopTrigger)是一个好主意吗?

2 个答案:

答案 0 :(得分:8)

好的答案是在问题中:

是的我可以使用WebJobsShutdownWatcher类,因为它有一个and函数,当取消令牌被取消时调用,换句话说就是当webjob停止时。

Register

编辑(基于马修评论):

如果使用触发功能,则可以在功能签名中添加static void Main() { var cancellationToken = new WebJobsShutdownWatcher().Token; cancellationToken.Register(() => { Console.Out.WriteLine("Do whatever you want before the webjob is stopped..."); }); var host = new JobHost(); // The following code ensures that the WebJob will be running continuously host.RunAndBlock(); } 参数。当主机自动关闭时,运行时将取消该令牌,允许您的功能接收通知。

CancellationToken

答案 1 :(得分:1)

  

我最近试图找出如何在没有的情况下执行此操作   包含WebJobShutdownWatcher的WebJobs SDK,这就是我   发现了。

底层运行时的作用(以及上面引用的WebJobsShutdownWatcher检查的内容)是在环境变量%WEBJOBS_SHUTDOWN_FILE%指定的位置创建本地文件。如果此文件存在,则它本质上是运行时向webjob发出的信号,它必须在可配置的等待时间内关闭(连续作业默认为5秒,触发作业默认为30秒),否则运行时将终止作业。

如果您没有使用包含上述WebJobsShutdownWatcher的Azure WebJobs SDK,那么您可以通过在一个时间间隔内监视关闭文件来实现Azure Web作业的正常关闭。比配置的等待时间短。

其他详细信息,包括如何配置等待期,如下所述:https://github.com/projectkudu/kudu/wiki/WebJobs#graceful-shutdown