直接将消息代理与最终用户客户端一起使用

Using a message broker with end user clients directly

我想找到一种方法来实现从服务器向多个 最终用户 客户端发送相同消息的推送消息。

我发现的一个选项是使用 message broker 并用它来实现 pub/sub 模式。我不确定在这种情况下应该将什么视为消费者。

我认为使用消息代理时的一般架构是:

终端用户客户端 <----> 消息代理 <---> 服务器(客户端和服务器也可以就与主题消息无关的事情相互交谈)

我至少认为应该发生的过程是这样的:

1) 最终用户客户端通过直接向消息代理发送初始消息来注册到特定主题。

2) 服务器收到一条关于他希望每个最终用户都能收到的主题的消息,因此它向该主题添加了一条消息。

3) 消息代理立即自己向所有最终用户发送消息,无需使用其他推送消息服务,如 SignalR、Pusher 等(无需使用它们意味着它可能会在幕后使用它,但开发人员实际上并未对消息的发送进行编程)。

后来听说消费者不应该是最终用户客户端,而是其他服务器?

我对过程的描述是否正确?还是其他原因?

pub/sub 模式确实符合您的要求。但是,有几点需要说明。

您需要澄清的第一个概念是与消息代理交互的客户端和服务器。从消息代理的角度来看,所有连接到它的东西 都是客户端。一般来说,客户端可以生产消息and/or消费消息;而已。在您的整体架构中,您的应用程序是否以其他身份充当客户端或服务器是无关紧要的,因为它与消息代理相关。

以下是使用您的 3 步过程的清晰摘要:

  1. 一个或多个客户就他们关心的主题创建消费者(有时称为 "subscriber")。
  2. 一个或多个客户端针对该主题生成消息,例如,通知 consumers/subscribers 一些事件。
  3. 代理将消息发送给每个已注册的 consumer/subscriber。

所有这些工作都是通过消息客户端实现专门完成的。换句话说,客户端应用程序只需要使用消息传递客户端实现(例如 AMQP 客户端、STOMP 客户端等)。代理本身会将实际消息分派给 consumers/subscribers,无论是通过某种异步 "listener" 还是同步方法调用来接收消息。这被认为是基本的消息传递功能。客户端应用程序无需使用任何类型的附加库(例如 SignalR 或 Pusher)从代理获取消息或将消息从代理推送到客户端。