RabbitMQ和Sails.js

6

我在使用Sails应用程序时遇到了RabbitMQ的问题。我不确定订阅者代码应该放在哪里。我的目标是构建一个通知系统,以便当管理员批准用户的数据请求时,用户的仪表板将弹出类似于Facebook弹出通知的通知。问题是,将订阅者代码放在我的仪表板控制器的显示路由中似乎从未抓取发布的消息。

非常感谢您的任何建议。目前正在使用rabbit.js包连接到RabbitMQ。


你是否考虑过使用Sails的内置资源发布/订阅系统来进行消息传递? - sgress454
这段代码位于您的应用程序前端,即客户端JavaScript中。它可以放置在包含Sails socket client<script>标签之后的任何位置,或者放置在类似于jQuery的引导脚本中的$(function(){})中。 - sgress454
所以,在我的“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()...)来监听发布吗? - kk415kk
我在这里创建了一个新的问题链接,因为它已经偏离原始问题的主题 - 谢谢! - kk415kk
看看这个使用Sails WebSockets的示例项目,也许它能帮助你理解所有东西是如何配合的。https://github.com/stenio123/sails-socket-example - Stenio Ferreira
显示剩余2条评论
2个回答

5
为了回答最初的问题,如果有人因某种原因想要使用Rabbit MQ而不是Sails的内置资源发布订阅, 最好的方法是使用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');

    }

}

0

这里有一个npm包,它为SailsJS实现了一个RabbitMQ适配器。


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