没有http端点的Sails.js工作节点

时间:2014-12-09 03:48:35

标签: node.js heroku sails.js waterline

我正在构建一个使用RabbitMQ的sails应用程序,将Web请求中的一些任务委派给工作节点。这几乎是https://devcenter.heroku.com/articles/background-jobs-queueinghttps://github.com/heroku-examples/node-articles-nlp中描述的模式。

虽然我可以在工作节点中执行sails.lift(),但似乎最好跳过http端点(express)和一些grunt任务(bower / frontend依赖下载,更少,web资源复制到.tmp,...)。

有没有办法实现这个目标?

谢谢!

修改

我需要在我的工作人员中使用风帆,这样我就可以使用水线ORM以及在帆中定义和暴露的公共服务。

2 个答案:

答案 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支持这一点,我对此感到非常幸运,你只需要确保你没有进行大量处理或任何可能需要很长时间的处理,因为你可能会开始在该网络节点上超时。