我使用的是php-redis-pubsub,我注意到如果订阅者没有运行,如果我们将事件发布到通道,那么该事件将被删除。
所以,由于这个原因,在向频道发布内容之前,我想检查订阅者是否正在运行?
任何识别状态的方式,或者任何不同的方式,这样我发布的事件就不应该退出。提前感谢
你无法判断你的订户是否在听,这是故意的:
请参阅http://redis.io/topics/pubsub
[…]发件人(发布者)未被编程为将邮件发送到特定接收器(订户)。相反,发布的消息是特征化为通道,不知道什么(如果有的话)那里可能有订阅者。
这不是Redis特有的,而是任何Pub/Sub实现背后的基本原则。
你可能在问如何可靠地向你传递消息,但Redis没有内置的功能:
http://redis.io/topics/notifications
因为Redis Pub/Sub是火和遗忘目前没有办法如果应用程序需要可靠的事件,也就是说,如果您的Pub/Sub客户端断开连接并重新连接稍后,在客户端断开连接的丢失。
您可能希望在现有功能的基础上实现自己的机制。例如,您可以将新消息LPUSH到PUB端的列表中,并在客户端对其进行RPOP,然后使用密钥空间通知来确定何时执行。使用这种方法,即使没有客户端在侦听,也不会丢失任何消息。