我是ActionHero的新手,我需要在队列中添加一些东西,等待它完成并获得数据,然后在响应客户机之前继续处理另一个队列的条目。看起来是这样的:
123abc值123abc将再次传递到队列中,以执行需要它的任务。值得注意的是,我知道这不是最优的,但这涉及到3台服务器。/foo访问了我的Node ActionHero服务器,123abc来自于一个Java服务器(把它看作一个身份验证服务),然后我的Node ActionHero服务器将把它发送出去,由一个.NET服务器来获取。
我现在用任务设置它的方式确实击中了Java服务器,Java服务器注销了我需要的值,但是在下面的代码中它是一个空对象
运行中的run():
api.actions.enqueue('MyJavaServerTask', {...}, function(error, toRun){
console.log(arguments) // <-- returns { '0': null, '1': true }
data.response.success = true
api.queue.push(data, next)
})任务:
exports.task = {
name: 'MyJavaServerTask',
description: 'My Java Server Task',
frequency: 0,
queue: 'default',
run: function (api, params, next) {
var job = {
response: {},
connection: {id: 'none'},
authorization: params.authorization,
params: {
apiVersion: '1',
action: 'MyJavaServerTask',
...
}
}
api.queue.push(job, function() {
console.log(arguments) // <-- returns {}
next()
})
}
}但是,在Java服务器上,我再次看到了请求,它是成功的,它返回正确的JSON。它的日志看起来像
15:19:22.542 [run-main-0] INFO application - apiq read: {"id":"none","params":{"apiVersion":"1","action":"MyJavaServerTask"}}
generating tables and key
15:19:22.543 [run-main-0] INFO application - result: {"key":"..."}所以..。我如何从那里得到这个key,以便用于追加到下一个队列的条目?
发布于 2016-08-26 22:46:56
如果action希望得到来自Java后端的synchronous响应,那么为什么不直接从操作中调用请求呢?
exports.foo = {
name: 'foo',
description: 'foo',
outputExample: {},
inputs: {}
run: function(api, data, next){
var request = require('request);
request.get('bar.com/bar', function(error, response){
if(error){ return next(error); }
var body = JSON.stringify(response.body);
data.response = body;
return next();
});
}
};在节点中,这种模式很好,因为当您的操作等待时,节点服务器可以为其他请求提供服务。
我不太清楚您的任务示例是否正在排队另一个任务?api.queue是什么?无论哪种方式,都无法从任务返回到操作的值。如果希望客户端轮询,可以让任务将来自Java服务器的最终响应存储在redis或其他地方,然后创建另一个操作,检查键是否存在,如果存在则返回它。
https://stackoverflow.com/questions/39175466
复制相似问题