1

我有一个通过不同主题发布消息的 redis 实例。与其实现复杂的心跳机制(很复杂,因为如果消息没有被消费,实例会在一段时间后停止发布消息),有没有办法检查 pubs 是否被任何人消费?

例如,实例向和RedisServer发布消息。订阅和订阅。当出于某种原因停止使用消息时,我想知道它并决定何时停止将消息发布到. 消费的终止是不可预测的,因此我无法告知终止/取消订阅。topic1topic2RedisClient1topic1RedisClient2topic2RedisClient2topic2RedisServertopic2topic2RedisServer

我想如果有办法让 redis 实例知道某个主题的消息是否被消费,那么这将是非常有用的信息。

知道这是否可能吗?

4

2 回答 2

3

鉴于您使用的是最新版本的 redis (> 2.8.0),这两个命令可能会对您有所帮助:

PUBSUB CHANNELS [pattern]

其中列出了与该模式匹配的当前活动频道(= 具有至少一个订阅者的频道)。

PUBSUB NUMSUB [chan1 ... chanN]

它返回指定频道的订阅者数量(但不适用于模式)。

注意:这两种解决方案都无法让您确定消息是否已被真正处理!如果您需要了解任务的完成情况(如果您的消息正在触发某些事情),那么我建议您搜索一个完整的作业队列(例如 Resque,如果您想坚持使用 Redis)


编辑:这是 Redis 文档。对于以上所有内容:http ://redis.io/commands/pubsub

于 2015-02-02T09:07:12.197 回答
3

您也可以使用 PUBLISH 的结果。它将为您提供收到消息的订阅者数量:http ://redis.io/commands/publish

这样您就不需要轮询 PUBSUB 命令,只需在发布消息后执行“停止发布”消息逻辑。

最多您发布一条没有人订阅的消息。

于 2015-02-02T09:50:01.727 回答