如何正常停止为Nodejs编写的Azure WebJob
我知道使用setting.job
文件可以正常closuresAzure WebJob 。 这是我的文件:
{ "schedule": "0 */10 * * * *", "stopping_wait_time": 120 }
我用JavaScript写了一个WebJob。 WebJob运行在Nodejs上。 它按需configuration,每隔10分钟由setting.job
触发。 出于某种原因,我的setting.job
文件不能正常closuresWebJob。 它总是失败。
也许我错过了一些东西,或者完全不了解WebJob的closures是如何结束的,但是我在run.js
中做了一个糟糕的调整:
setTimeout(function () { process.exit(); }, 30000);
这段代码在脚本的末尾执行。 我想知道是否有一个更优雅的解决scheme旁边,我正在使用。
run.js
示例:
const http = require('http'); const request = require('request'); const fb = require('firebase'); request(process.env.SourceUrl, function (error, response, body) { 'use strict'; if (!error && response.statusCode == 200) { // Process data from body } else { console.log(error); } }); // Nasty hack to end gracefully setTimeout(function () { process.exit(); }, 6000);
我觉得优雅的方式是等待完成工作,而不是在处理中断。
const http = require('http'); const request = require('request'); const fb = require('firebase'); var sig = -1; request(process.env.SourceUrl, function (error, response, body) { 'use strict'; if (!error && response.statusCode == 200) { // Process data from body sig = 0; } else { console.log(error); sig = 1; } }); setInterval(function() { if(sig > -1) { process.exit(sig); } }, 6000);
实现目标的更清晰的方法是在完成业务逻辑之后调用process.exit。 这使您可以完全控制WebJob的生命周期。
const http = require('http'); const request = require('request'); const fb = require('firebase'); request(process.env.SourceUrl, function (error, response, body) { 'use strict'; if (!error && response.statusCode == 200) { // Process data from body //When finished process.exit(0); } else { console.log(error); process.exit(1); // provide a non-zero error, because the job failed } });