0

我正在使用 php redis pubsub 我注意到如果订阅者没有运行并且如果我们将事件发布到频道,那么该事件将被删除。

因此,由于这个原因,在将内容发布到频道之前,我想检查订阅者是否正在运行?

任何识别状态的方式或任何不同的方式,以便我发布的事件不应该退出。提前致谢

4

1 回答 1

4

您无法判断您的订阅者是否在收听,这是设计使然:

http://redis.io/topics/pubsub

[...] 发送者(发布者)没有被编程为将他们的消息发送给特定的接收者(订阅者)。相反,发布的消息被表征为通道,而不知道可能有什么(如果有的话)订阅者

这不是 Redis 特有的,而是任何 Pub/Sub 实现背后的基本原则。

您可能会问如何可靠地传递消息,但同样,Redis 没有内置功能:

http://redis.io/topics/notifications

因为 Redis Pub/Sub 是火而忘记的,如果您的应用程序需要可靠的事件通知,则无法使用此功能,也就是说,如果您的 Pub/Sub 客户端断开连接并稍后重新连接,则在此期间传递的所有事件客户端断开连接丢失。

您可能希望在现有功能之上实现自己的机制。例如,您可以LPUSH新消息到 PUB 端的列表,并在客户端RPOP并使用键空间通知来知道何时这样做。使用这种方法,即使没有客户端在收听,您也不会丢失任何消息。

于 2014-10-02T11:20:44.733 回答