【问题标题】:Sails.js worker node without http endpoint没有 http 端点的 Sails.js 工作节点
【发布时间】:2015-02-06 21:11:14
【问题描述】:

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

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

有什么方法可以实现吗?

谢谢!

编辑

我的工作人员需要帆,以便我可以使用水线 ORM 和在帆中定义和公开的公共服务。

【问题讨论】:

    标签: node.js heroku sails.js waterline


    【解决方案1】:

    如果你想在没有 webserver 和其他 web 相关组件的情况下使用 Sails ORM,你可以使用 Sails Hooks 来配置一个最小的应用程序

    我写了一篇关于我如何获得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)
        })
    })
    

    【讨论】:

    • 非常感谢!正是我想要的。
    【解决方案2】:

    在工作节点中使用sails.js 究竟能带来什么好处? Sails.js 是一个 web 框架,你没有将你的 worker 用于 web,至少不是直接使用。 Sails.js 不是您想要的。在这种情况下,MVC 不会使您受益,但您绝对可以借鉴它的范式。

    我还没有将 RabbitMQ 与 node.js 一起使用,我通常更喜欢 redis 作为消息代理。我使用kue 做了类似的事情。 Kue 非常适合此类任务,您基本上可以像在 Express 中定义路线一样定义工作。所以你绝对可以制作一个控制器来构建你的逻辑,但是 Sails.js 不是正确的工具。

    如果您决定使用 Sails.js 仅仅是因为它的生成器,那么您绝对可以用 grunt 和 yeoman 弄脏您的手。不会很困难。另一个概念是将您的工作人员集成到您的 Web 节点中,并限制每个工作人员上运行的作业数量。 Kue 支持这一点,我对此很幸运,您只需要确保您没有进行大量处理或任何可能需要很长时间的处理,因为您可能会在该 Web 节点上开始超时。

    【讨论】:

    • 感谢您的回复。我忘了提到我们使用风帆作为结构和水线 ORM。我需要在我的工人中使用风帆,这样我就可以使用水线 ORM 和在风帆中定义和公开的公共服务。我编辑了我的问题。
    • 虽然它可能不是世界上最有效的事情,但如果您想将一些水线模型代码移植到工作人员后台进程中会发生什么?要么你这样做(很少工作),要么你使用非 Waterline 从头开始​​重建东西。努力……
    • 拿回来 - 我想最好在 Waterline 中直接使用 require 而不使用 Sails。
    • @ChrisHoughton 没错。水线是一个单独的项目。这很难做到,因为没有太多关于如何将水线与帆分开使用的文档,但我无法想象它会比尝试使用完全不同的 ORM 来代替它更难。我只是不认为sails 对工人来说是一个好的设计模式。更不用说我认为 http 对工人来说是一个糟糕的协议选择,原因比我想说的要多(问你是否敢)。
    猜你喜欢
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-03
    • 2015-03-08
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多