Sails.js工作节点无http端点

6
我正在构建一个 sails 应用程序,它使用 RabbitMQ 将一些任务从 web 请求委派给工作节点。这基本上是在 https://devcenter.heroku.com/articles/background-jobs-queueinghttps://github.com/heroku-examples/node-articles-nlp 中描述的模式。
虽然我可以在工作节点中执行 sails.lift(),但似乎跳过 http 端点(express)和一些 grunt 任务(bower/frontend 依赖项下载、less、web 资源复制到.tmp,...)会更好。
有什么办法实现这一点吗?
谢谢!
编辑
我需要在我的工作节点中使用 sails,以便可以使用 waterline ORM 和在 sails 中定义和公开的常用服务。
2个回答

16
如果您想在没有Web服务器和其他Web相关组件的情况下使用Sails ORM,可以使用Sails Hooks配置最小化应用程序。
我写了一篇关于如何在SailsJS和Kue中使用background tasks的完整博客文章,但这里是主要的Hooks部分:
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)
    })
})

非常感谢!正是我一直在寻找的。 - Manuel Darveau

-1

在工作节点中使用sails.js会带来什么好处呢?Sails.js是一个Web框架,你并不直接将其用于Web。在这种情况下,MVC不会对你有所帮助,但你肯定可以从它的范例中获益。

我还没有使用过RabbitMQ和node.js,通常我更喜欢redis作为消息代理。我使用kue做了类似的事情。Kue非常适合这种任务,你可以像在Express中定义路由一样定义作业。因此,你肯定可以创建一个控制器来组织你的逻辑,但Sails.js不是正确的工具。

如果你决定使用Sails.js只是因为它的生成器,你肯定可以通过grunt和yeoman来实现。这并不难。另一个概念是将你的工作节点集成到Web节点中,并限制每个工作节点运行的作业数量。Kue支持这一点,我在这方面也取得了很好的效果,你只需要确保你不会进行大量处理或任何可能需要很长时间的处理,否则你可能会在Web节点上超时。


感谢您的回复。我忘记提到我们使用Sails作为结构和水平线ORM。我需要在我的工作者中使用Sails,以便我可以使用Waterline ORM和在Sails中定义和公开的常见服务。我已经编辑了我的问题。 - Manuel Darveau
虽然这可能不是世界上最有效的事情,但如果您想将一些Waterline模型代码移植到工作后台进程中会发生什么?要么您可以这样做(很少工作),要么您可以使用非Waterline从头开始重建。努力... - Chris Houghton
1
把那个想法撤回吧 - 我想直接在Waterline中使用require,而不是使用Sails可能会更好。 - Chris Houghton
@ChrisHoughton 没错。Waterline是一个独立的项目。由于很少有关于如何单独使用waterline的文档,所以这很困难,但我无法想象它比尝试在其位置使用完全不同的ORM更难。我只是认为风帆不是对于工作者而言好的设计模式。更不用说我认为HTTP协议对于工作者来说是一个糟糕的协议选择,其原因不止一点(如果你敢问的话)。 - tsturzl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接