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

时间:2021-03-18 19:06:15

标签: spring-boot apache-kafka rabbitmq messagebroker apache-pulsar

我一直在考虑我的系统存在多个消费者问题,但不幸的是我真的被卡住了。我的意思是 - 我看到了一些解决方案,如下所示,但它们可能不够高效。先介绍一下系统:

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

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

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

  2. 一个带有标记的队列,每个用户都使用了消息 - 我尝试使用 apache Pulsar 实现这一点,但是我的每一次尝试都因创建的新消费者而耗尽(不是作为同一个消费者继续) - 也许我不能使用这个 API?

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

我将非常感谢每一个提示 - 如果您看到其他技术的更好解决方案,请告诉我 - 我会适应这一点。

(如果重要的话 - Java 和 SpringBoot 是这方面的核心)

1 个答案:

答案 0 :(得分:0)

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