如果最好在此处或在Programmers.SE上询问此问题,那么如果我遇到此问题,请迁移。每个消息类型的单个消费者的分布式发布/订阅
首先,关于我想要实现的一点。我有一个node.js应用程序从一个来源(一个socket.io客户端)接收消息,然后对消息进行处理,这可能导致零或多个消息退出,或者发送给该发送者或该消息中的其他客户端组。
对于处理,我想本质上只是推送消息到一个队列中,然后它通过各种消息处理器,可能会启动自己的项目,最终,运行socket.io位通知“嘿,发回这条消息“
作为一个具体的例子,说一个用户登录到服务,然后登录消息被放置在队列中,授权处理器获取它,这是事情,然后放置一条消息回到队列中说客户端已被授权。这返回到连接到客户端的socket.io套接字以及其他可能感兴趣的客户端。它也可以转到其他可能希望对授权进行更多处理的子系统(查找用户信息,根据其数据发送更多信息给客户端等)。
如果我想要强耦合,这将很容易,但我之前尝试过,它只是去了一堆很脆弱的意大利面代码,我想避免这种情况。设置中的另一个问题是,这应该是集群能力,这是真正的问题出现的地方。可能有不止一个授权处理器正在运行。但授权信息只能处理一次。因此,简而言之,我正在寻找一种模式/技术,使我能够从根本上为消息拥有多个订阅者“群组”,并且每个群组只能处理一次该消息。
我想过可能让每个处理器的实例都会生成一个唯一的名字,这个名字将被用作Reids中的一个列表。然后该名称将被注册到某种调度处理程序中,并被放入该组用户的集合中。然后,当消息到达时,调度会从该集合中抽取一个随机成员,并将其放入该列表中。虽然看起来这样会起作用,但似乎有点过于复杂和脆弱。
核心问题是我从来没有设计过这样的系统,所以我甚至不确定使用或查找的恰当术语。如果任何人都可以为我指出正确的方向,我会非常感激。