您可以查询已在发布/订阅系统中使用的旧邮件吗?

时间:2020-05-09 15:57:44

标签: apache-kafka redis rabbitmq publish-subscribe

我正在构建一个纸牌系统,并且我决定使用SSE来发布/订阅系统,以使客户保持最新状态。我面临的一个问题是保留邮件以供以后查询。一个用例是玩家加入桌面游戏。我想从当前手中获取所有事件,然后为该用户重播。

我当前正在使用redis的发布/订阅,但消息完全是短暂的。我已经对RabbitMQ进行了一些深入研究,情况似乎也是如此。 Kafka似乎有一些重播功能?不过,我无法确定它是否如我所愿。

期望我的发布/订阅层的持久性是否合理?还是应该分开逻辑?我可以让一个消费者运行以仅接收事件并将其存储。但是,这似乎很沉重,失败的机会太多。

我还想查询旧事件,以获取玩家的状态以及所玩的纸牌。但是,速度并不是这些查询的因素。

2 个答案:

答案 0 :(得分:1)

我不知道支持消息持久性的任何发布/订阅消息分发器。

运行使用者将消息保存在持久性存储中是有效的解决方案。但是我认为,对于您的用例,可能值得使用流。 Kafkaredis都支持。

答案 1 :(得分:1)

看看Redis Streams,它是v5以来Redis的一部分。

What are the main differences between Redis Pub/Sub and Redis Stream?

它将保留您的消息。使用消费者群体,消费者可以处在流的不同位置

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