【发布时间】:2015-08-04 19:31:34
【问题描述】:
我安装了一个由 nodeJS 服务器使用的 rabbitMQ。 我使用 rabbit.js 库与 rabbit 进行交互,到目前为止我很满意。
在扇出模式下,我在同一个队列中获得了多个订阅者, 每个节点是订阅者,也是发布者 这对我有好处并且工作正常,因为在很多情况下,我想通知所有服务器有关其中一个节点(也是发布者......)上发生的一些更新。
我偶然发现了一种情况,在这种情况下,我需要向队列中的所有侦听器发送消息,发送消息的人除外(它也是同一队列上的侦听器)。
我事先不知道谁在听(可能有一个,可能有数百万个),所以我无法通过某些白名单路由规则将其路由到某些特定节点。 它必须是某种排除通配符路由规则(一些黑名单) 例如,将此消息发送给与我自己的唯一 ID 不对应的所有收听者...
可以使用 rabbit.js 来完成吗? 甚至可以在rabbitmq中以某种方式完成吗?
我不太了解兔子... 所以对我温柔一点:)
顺便说一句,如果你知道如何使用 rabbit.js 来做这件事,那就更好了……
编辑::
根据 Derick Bailey 的要求 这就是我需要这个的原因
我有一个系统,其中有许多负载平衡的 nodeJS 服务器,它们作为 webServices 运行。 它们彼此完全透明。 他们都不知道还有哪些其他节点存在。我想保持这种方式,因为这种分离使我更容易通过添加和删除其他“并行”节点来更好地扩展。
每个节点都有自己的内存本地缓存服务。我偶然发现了单个节点更新某个实体的情况。现在我需要使该节点能够通知所有其他并行节点(可能在缓存中具有相同的实体)使其无效。
问题是我发送消息的节点(更新节点)也会收到消息,因为他也是一个监听器。所以我希望他以某种方式将自己排除在该特定消息的接收者列表之外......因此需要一些路由黑名单。 (他知道自己,所以我可以让他路由到除了他自己的身份之外的每个人......但即使有人确实在另一端听他也不知道......所以它肯定不能成为白名单)
希望我的需求现在更清楚了。
我已经想到了解决我的问题的方法,但是我需要额外的开发,我想通过使用 rabbit 的当前能力来避免它(以防万一) 我可以在消息内容中添加一个唯一 ID。然后发送节点可以识别该消息来自他并忽略该消息。 但正如您显然可以理解的那样,这可能会变得很棘手,因为我需要考虑额外的陷阱和其他可能失败的边缘情况......
如果有人可以告诉我如何使用现有的一些兔子配置来做到这一点,我会很高兴听到如何 :)
【问题讨论】:
标签: node.js rabbitmq amqp node-amqp rabbit.js