消息代理 - 具有相同客户端 ID 的多个消费者

Message Brokers - Multiple consumers with this same client ID

我一直在考虑我的系统的一些多用户问题,不幸的是我真的被困住了。我的意思是 - 我看到了下面的一些解决方案,但它们可能不够有效。先介绍一下系统:

用户有自己的特定 ID。用户可以登录不同的设备 - 许多手机,同时使用许多浏览器。当用户离线时,用户在线时应提供用户收到的每条消息。当用户在线时,应定期通知消息。每个用户在线时都通过 WebSocket 连接。

所以我一直在考虑这个池中的消息代理 - rabbitmq、kafka、apache pulsar(以上所有系统都将在 Java 中)。这是我的想法:

  1. Rabbitmq - 每个设备都有自己的与客户端 ID 关联的队列。但在这里我看到了一些麻烦。例如 - 用户将登录 4 个浏览器,每个浏览器都会获得新队列(当然,我假设一些未使用的队列会在一段时间后被删除,但如果有人只想这样做,这个解决方案可能会过载)。

  2. 一个队列,每个用户都使用了消息 - 我尝试用 apache Pulsar 实现这个,但我的每一次尝试都是 运行 创建新的消费者(不继续相同consumer) - 也许我不能使用这个 API?

  3. Apache kafka - 组和分区?与第1点类似。

我将非常感谢每一个提示 - 如果您看到一些更好的其他技术解决方案,请告诉我 - 我会对此进行调整。

(如果重要 - Java 和 SpringBoot 是核心)

我可以响应 apache pulsar 部分 - 您需要将 consumer 中的 SubscriptionName 设置为等于您的 UserId,这将确保从该用户最后确认的消息开始使用消息。