【发布时间】: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