我是ActionHero的新手,我需要在队列中添加一些内容,等到完成后再获取数据,然后在响应客户端之前继续使用另一个队列项。看起来像这样:
123abc
123abc
再次传递给队列以完成需要它的任务值得注意的是,我知道这不是最佳选择,但这涉及3台服务器。 / foo命中我的Node ActionHero服务器,123abc
来自Java服务器(将其视为身份验证服务),然后我的Node ActionHero服务器将发送它以供.NET服务器接收。
我现在用任务设置它的方式确实击中了Java服务器,Java服务器在我下面的代码中记录了我需要的值但是是一个空对象
ACTION中的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)
})
TASK:
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
以用于附加到下一个队列&#d; d项?
答案 0 :(得分:2)
如果API客户端期望来自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
?无论哪种方式,都无法将任务中的值返回到操作。如果您希望客户端进行POLL,您可以让任务存储来自Java服务器的redis或其他地方的最终响应,然后创建另一个检查密钥是否存在的操作,如果存在则返回它。