您可以查询已在 pub/sub 系统中使用的旧消息吗?

Can you query old messages already consumed in a pub/sub system?

我正在构建一个扑克牌系统,并且我决定使用 SSE 的 pub/sub 系统来保持客户端更新。我面临的一个问题是保留消息以供以后查询。一个用例是玩家加入 table 游戏中期。我想从当前手牌中获取所有事件并为该用户重播它们。

我目前正在使用 Redis 的 pub/sub,但消息完全是短暂的。我对 rabbitMQ 进行了一些深入研究,结果似乎也是如此。 Kafka 似乎有一些重播功能?不过,我不知道它是否像我想要的那样精细。

从我的 pub/sub 层期望持久性是否合理?还是我应该分开逻辑?我可以有一个消费者 运行 来获取事件并存储它们。不过,这似乎很沉重,失败的机会太多了。

我还想查询旧赛事的球员统计数据和出牌情况。不过,速度并不是影响这些查询的因素。

我不知道任何 pub/sub 支持消息持久化的消息分发器。

运行 将消息保存在持久存储中的消费者是一个有效的解决方案。但我认为对于您的用例,使用流可能是值得的。 Kafka and redis.

都支持它

看看 Redis Streams,从 v5 开始它是 Redis 的一部分。

它将保留您的消息。使用消费者组,消费者可以处于流的不同偏移量

https://redis.io/topics/streams-intro