我们的应用程序正在使用Web作业生成数据,有一段时间我们遇到了一个问题,即它在处理消息队列时有时被意外停止/重新启动。这会导致我们的webjob不知道何时强制重新启动/停止以标记要处理的数据,然后再让webjob重新启动/停止。
是否有获取停止/重新启动通知以同步数据的想法?
非常感谢!
答案 0 :(得分:1)
如果您使用队列,则重新启动Webjob不会导致您丢失任何数据。由于该消息不会完成,因此会将其放回到队列中进行(重新)处理。
就重启而言:请确保您的代码中没有任何可以完全破坏webjob的方案。
添加Application Insights并为您要查找的特定情况添加警报。
答案 1 :(得分:0)
有时,网络作业可能会因按比例扩大程序而被杀死。您可以通过使用nuget软件包Microsoft.Azure.WebJobs.WebJobsShutdownWatcher
中的类Microsoft.Azure.WebJobs
来监听关闭事件,以确保它们正常退出。
与nuget软件包的1.1.2版本一样:
public sealed class WebJobsShutdownWatcher : IDisposable
{
// Begin watching for a shutdown notification from Antares.
public WebJobsShutdownWatcher();
// Get a CancellationToken that is signaled when the shutdown notification is detected.
public CancellationToken Token { get; }
// Stop watching for the shutdown notification
public void Dispose();
}
一种使用此方法的方法:在您的webjob Program.cs
类中,您将获得取消令牌并编写要在关机时执行的代码。
private static void Main()
{
...
var cancellationToken = new WebJobsShutdownWatcher().Token;
...
cancellationToken.Register(() =>
{
//Your data operations here
});
...
}
答案 2 :(得分:0)
感谢戴安娜提供的信息。我尝试了这种方法,但是效果不是很好,尽管我在settings.job文件中设置了60秒,但webjob只是等待5秒才能重新启动/停止。这是我的下面的代码
static void Main()
{
var config = new JobHostConfiguration();
var host = new JobHost();
var cancellationToken = new WebJobsShutdownWatcher().Token;
cancellationToken.Register(() =>
{
//Raise the signal
});
// The following code ensures that the WebJob will be running continuously
host.RunAndBlock();
}