【问题标题】:RabbitMQ and Sails.jsRabbitMQ 和 Sails.js
【发布时间】:2014-08-10 18:19:32
【问题描述】:

在我的 Sails 应用中使用 RabbitMQ 时遇到问题。我不确定在哪里放置订阅者代码。我要做的是建立一个通知系统,这样当管理员批准用户的数据请求时,用户的仪表板会弹出一个通知,类似于 Facebook 弹出通知的方式。问题是,将订阅者代码放在我的仪表板控制器的显示路由中似乎永远无法获取已发布的消息。

任何建议将不胜感激。目前使用rabbit.js包连接RabbitMQ。

【问题讨论】:

  • 您是否考虑过使用 Sails 的 build in resourceful pubsub system 进行消息传递?
  • 感谢 sgress454!这绝对是我正在寻找的。不过,我仍然有一个类似的问题:对于接收者,“监听”代码到底去哪里了?例如,使用 io.socket.on("request", function()...),我将在哪里放置此代码,以便用户可以在为特定用户批准“请求”时持续监听更新?
  • 此代码位于应用程序的前端,在客户端 Javascript 中。它可以在包含Sails socket client<script> 标记之后的任何位置,或者在像jQuery 的$(function(){}) 这样的引导脚本中。
  • 因此,在我的RequestController 中,在grant 操作下,我会在执行更新时发布更新。在我的DashboardController 中,在我的display 操作下,我拨打Request.find(req.session.user.id, function(err, requests) 并使用User.subscribe(req.socket, requests, ['update']); 订阅。这是放置发布/订阅的正确方法吗?在 DashboardController.display 呈现的视图上,我是否只需要使用 io.socket.on("request", function()...) 来监听发布?
  • 在您的DashboardController 中,您可以使用Request.subscribe(req, requests, ['update']) 订阅,假设您只想了解更新(而不是删除)。在您的RequestController 中,使用.publishUpdate 发布更新。那么在你看来,io.socket.on("request", function()...) 是正确的。

标签: node.js rabbitmq messaging sails.js event-driven


【解决方案1】:

要回答最初的问题,如果有人出于某种原因想要使用 Rabbit MQ 而不是 Sails 的 built-in resourceful pubsub,最好使用 rabbit.js

首先,npm install rabbit.js

然后,在 Sails 项目的 config/sockets.js 中(大量借用自 rabbit.js socket.io example):

var context = require('rabbit.js').createContext();
module.exports = {

     onConnect: function(session, socket) {
        var pub = context.socket('PUB');
        var sub = context.socket('SUB');

        socket.on('disconnect', function() {
          pub.close();
          sub.close();
        });

        // NB we have to adapt between the APIs
        sub.setEncoding('utf8');
        socket.on('message', function(msg) {
          pub.write(msg, 'utf8');
        });
        sub.on('data', function(msg) {
          socket.send(msg);
        });
        sub.connect('chat');
        pub.connect('chat');

    }

}

【讨论】:

    【解决方案2】:

    这是一个为 SailsJS 实现 RabbitMQ 适配器的 npm package

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-01
      • 2014-12-23
      • 1970-01-01
      • 2015-01-03
      • 1970-01-01
      相关资源
      最近更新 更多