根据解析服务器迁移指南,我们可以使用Kue和Kue-UI之类的东西来模拟parse.com预定作业功能。
我还没有实现Kue或Kue-ui,但是看一下这些指南,它看起来并不像现有的parse.com预定作业那样提供接近同等级别的功能。这个观察是否正确?有人实施了吗?是否真的必须通过jue在Kue中安排工作,而Kue-ui只提供工作当前状态的摘要,并且无法通过Kue-ui添加新的时间表?
有没有人试图用Jenkins这样的结果取得同样的结果?所以这就是我的想法:
我可以看到好处:
当前parse.com调度作业/云作业唯一可以做到的就是基于jenkins的解决方案无法从下拉列表中选择作业名称来创建新计划。
我错过了什么吗?其他人怎么样呢?感谢。
答案 0 :(得分:5)
我最后用'节日计划'做了这个。不确定它是否是最佳选择,但它对我来说运作正常。
<强> index.js 强>
var schedule = require('node-schedule');
var request = require('request');
schedule.scheduleJob('*/15 * * * *', function() {
var options = {
url: serverUrl + '/functions/{function name}}',
headers: {
'X-Parse-Application-Id': appID,
'X-Parse-Master-Key': masterKey,
'Content-Type': 'application/json'
}
};
request.post(options, function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body);
}
});
});
<强> main.js 强>
Parse.Cloud.define('{function name}', function(req, res) {
//Check for master key to prevent users to call this
if (req.master === true) {
//Do operations here
} else {
res.error('Need Master Key');
}
});
答案 1 :(得分:1)
我为此目的使用kue
。我已经描述了in my article。简而言之,这个功能:
Parse.Cloud.job("sendReport", function(request, response) {
Parse.Cloud.httpRequest({
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
url: "https://example.com/url/", // Webhook url
body: "body goes here",
success: function(httpResponse) {
console.log("Successfully POSTed to the webhook");
},
error: function(httpResponse) {
console.error("Couldn't POST to webhook: " + httpResponse);
}
});
});
成为这个:
// Create a kue instance and a queue.
var kue = require('kue-scheduler');
var Queue = kue.createQueue();
var jobName = "sendReport";
// Create a job instance in the queue.
var job = Queue
.createJob(jobName)
// Priority can be 'low', 'normal', 'medium', 'high' and 'critical'
.priority('normal')
// We don't want to keep the job in memory after it's completed.
.removeOnComplete(true);
// Schedule it to run every 60 minutes. Function every(interval, job) accepts interval in either a human-interval String format or a cron String format.
Queue.every('60 minutes', job);
// Processing a scheduled job.
Queue.process(jobName, sendReport);
// The body of job goes here.
function sendReport(job, done) {
Parse.Cloud.httpRequest({
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
url: "https://example.com/url/", // Webhook url
body: "body goes here"}).then(function(httpResponse) {
console.log("Successfully POSTed to the webhook");
// Don't forget to run done() when job is done.
done();
}, function(httpResponse) {
var errorMessage = "Couldn't POST to webhook: " + httpResponse;
console.error(errorMessage);
// Pass Error object to done() to mark this job as failed.
done(new Error(errorMessage));
});
}
它工作正常,但我注意到有时kue-scheduler
会比需要更频繁地触发事件。有关详细信息,请参阅此问题:https://github.com/lykmapipo/kue-scheduler/issues/45
答案 2 :(得分:0)
如果您使用的是AWS,则可以选择以下选项:
创建一个按特定间隔触发的AWS CloudWatch事件规则,并调用Lambda函数。事件规则可以将参数传递给Lambda函数。
创建一个简单的Lambda函数,该函数调用Cloud Code函数/作业。如果您从事件规则中接收到云代码函数名称和其他参数,则对于任何云代码调用,您只需一个通用Lambda函数。
这具有多个优点,因为事件规则是AWS基础架构的一部分,可以轻松地与其他AWS服务集成。例如,您可以设置事件规则调用的智能排队,以便如果上一个调用尚未完成,则可以丢弃队列中的下一个调用,溢出到另一个队列,通知操作员等。
答案 3 :(得分:0)
您可以使用parse-server-scheduler npm模块。
它不需要任何外部服务器,仅允许您在parse-dashboard中设置计划。