我正在构建一个使用RabbitMQ的sails应用程序,将Web请求中的一些任务委派给工作节点。这几乎是https://devcenter.heroku.com/articles/background-jobs-queueing和https://github.com/heroku-examples/node-articles-nlp中描述的模式。
虽然我可以在工作节点中执行sails.lift(),但似乎最好跳过http端点(express)和一些grunt任务(bower / frontend依赖下载,更少,web资源复制到.tmp,...)。
有没有办法实现这个目标?
谢谢!
我需要在我的工作人员中使用风帆,这样我就可以使用水线ORM以及在帆中定义和暴露的公共服务。
答案 0 :(得分:16)
如果您想在没有网络服务器和其他网络相关组件的情况下使用Sails ORM,您可以使用Sails Hook配置最小应用程序
我写了一篇关于我如何得到background tasks working with SailsJS and Kue的完整博客文章,但这里是主要的钩子部分:
require('sails').load({
hooks: {
blueprints: false,
controllers: false,
cors: false,
csrf: false,
grunt: false,
http: false,
i18n: false,
logger: false,
//orm: leave default hook
policies: false,
pubsub: false,
request: false,
responses: false,
//services: leave default hook,
session: false,
sockets: false,
views: false
}
}, function(err, app){
//You can access all your SailsJS Models and Services here
User.findOne(1).then(function(user){
console.log(user)
})
})
答案 1 :(得分:-1)
在工作节点中使用sails.js会对您有什么好处? Sails.js是一个Web框架,您不是将您的工作者用于Web,至少不是直接使用。 Sails.js不是你想要的。在这种情况下,MVC不会让你受益,但你绝对可以从它的范例中获益。
我还没有将RabbitMQ用于node.js,我通常更喜欢redis作为消息代理。我使用kue做了类似的事情。 Kue真的面向这种任务,你基本上可以定义工作,就像你在Express中定义路线一样。所以你绝对可以制作一个控制器来构建你的逻辑,但是Sails.js不是正确的工具。
如果你决定使用Sails.js只是因为它的发生器,你绝对可以用咕噜咕噜和自耕农来弄脏你。不会很困难。另一个概念是将您的工作人员集成到您的Web节点中,并限制每个工作人员运行的作业数量。 Kue支持这一点,我对此感到非常幸运,你只需要确保你没有进行大量处理或任何可能需要很长时间的处理,因为你可能会开始在该网络节点上超时。