我有一个redis实例,它通过不同的主题发布消息。除了实现复杂的心跳机制(之所以复杂,因为如果消息未被使用,实例将在一段时间后停止发布消息),是否有一种方法可以检查是否有人使用了pub?
例如,实例RedisServer向topic1和topic2发布消息。RedisClient1订阅topic1,RedisClient2订阅topic2。无论出于什么原因,当RedisClient2停止使用topic2的消息时,我希望RedisServer知道这一点,并决定何时停止向topic2发布消息。topic2消费的中断是不可预测的,因此我无法通知RedisServer停止/取消订阅。
我想,如果有一种方法可以让redis实例知道某个主题的消息是否被消费,那么这将是非常有用的信息。
你知道这是否可能吗?
发布于 2015-02-02 17:07:12
假设您使用的是redis的最新版本(> 2.8.0),这两个命令可能会对您有所帮助:
PUBSUB CHANNELS [pattern]其列出与该模式匹配的当前活动信道(=具有至少一个订户的信道)。
PUBSUB NUMSUB [chan1 ... chanN]它返回指定频道的订阅者数量(但不适用于模式)。
注意:这两种解决方案都不能让您确定消息是否得到了真正的处理!如果你需要知道任务的完成情况(如果你的消息触发了什么),那么我建议你搜索一个完整的作业队列(例如Resque,如果你想继续使用Redis)
编辑:这是Redis文档。对于以上所有内容:http://redis.io/commands/pubsub
发布于 2015-02-02 17:50:02
您还可以使用发布的结果。它将为您提供收到消息的订阅者数量:http://redis.io/commands/publish
这样,您不需要轮询PUBSUB命令,只需在发布消息后执行“停止发布”消息逻辑即可。
最多只能发布一条消息,没有人订阅。
https://stackoverflow.com/questions/28272317
复制相似问题