C# Pub/Sub Redis,我是否可以监视是否使用了任何已发布的消息?

C# Pub/Sub Redis,我是否可以监视是否使用了任何已发布的消息?,c#,redis,publish-subscribe,stackexchange.redis,C#,Redis,Publish Subscribe,Stackexchange.redis,我有一个redis实例,它通过不同的主题发布消息。没有实现复杂的心跳机制(复杂是因为如果消息没有被消费,实例会在一段时间后停止发布消息),有没有办法检查pub是否被任何人消费 例如,实例rediserver将消息发布到topic1和topic2RedisClient1订阅topic1和RedisClient2订阅topic2。当RedisClient2出于任何原因停止使用topic2的邮件时,我希望RedisServer了解它,并决定何时停止向topic2发布邮件。topic2消费的中断是不可预

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

例如,实例
rediserver
将消息发布到
topic1
topic2
RedisClient1
订阅
topic1
RedisClient2
订阅
topic2
。当
RedisClient2
出于任何原因停止使用
topic2
的邮件时,我希望
RedisServer
了解它,并决定何时停止向
topic2
发布邮件。
topic2
消费的中断是不可预测的,因此我无法通知
RedisServer
停止/取消订阅

我认为,如果有一种方法让redis实例知道某个主题的消息是否被消费,那么这将是非常有用的信息


你知道这是否可能吗

如果您使用的是redis的最新版本(>2.8.0),这两个命令可能会帮助您:

PUBSUB CHANNELS [pattern]
其中列出了与模式匹配的当前活动频道(=至少有一个订户的频道)

PUBSUB NUMSUB [chan1 ... chanN]
它返回指定通道的订户数(但不适用于模式)

注意:这两种解决方案都不能让您确定消息是否得到了真正的处理!如果您需要了解任务的完成情况(如果您的消息触发了什么),那么我建议您搜索一个完整的作业队列(例如,如果您想继续使用Redis,请使用Resque)



编辑:这是Redis文档。对于以上所有内容:

如果您使用的是redis(>2.8.0)的最新版本,这两个命令可能会帮助您:

PUBSUB CHANNELS [pattern]
其中列出了与模式匹配的当前活动频道(=至少有一个订户的频道)

PUBSUB NUMSUB [chan1 ... chanN]
它返回指定通道的订户数(但不适用于模式)

注意:这两种解决方案都不能让您确定消息是否得到了真正的处理!如果您需要了解任务的完成情况(如果您的消息触发了什么),那么我建议您搜索一个完整的作业队列(例如,如果您想继续使用Redis,请使用Resque)



编辑:这是Redis文档。对于以上所有内容:

您还可以使用发布的结果。它将为您提供接收该消息的订阅者数量:

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


最多只发布一条消息,没有人订阅。

您也可以使用发布的结果。它将为您提供接收该消息的订阅者数量:

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


你最多只能发布一条消息,没有人订阅。

完美,这正是我想要的(我只需要知道是否有订阅者)。谢谢@pysco68。对于那些想知道Stackexchange.Redis提供的实现的人来说,这正是我想要的(我只需要知道是否有订户)。谢谢@pysco68。对于那些想知道Stackexchange提供的实现的人来说,Redis:我没有意识到这一点,它甚至更好、更容易处理。您知道计数是否包括订阅与发布发送到的主题匹配的模式的用户?它应该包括模式订阅。但您仍然需要不时轮询我的答案中的方法,以便知道何时可以再次“发布”(这是必需的)。顺便说一句,因为您似乎使用Stackexchange.Redis,它的发布方法返回subscribers@pysco68我的理解是这就是若昂·帕雷拉所说的,Publish方法返回订阅者的数量。我没有意识到这一点,这更容易处理。您知道计数是否包括订阅与发布发送到的主题匹配的模式的用户?它应该包括模式订阅。但您仍然需要不时轮询我的答案中的方法,以便知道何时可以再次“发布”(这是必需的)。顺便说一句,因为您似乎使用Stackexchange.Redis,它的发布方法返回subscribers@pysco68我的理解是这就是若昂·帕雷拉所说的,Publish方法返回订阅服务器的数量。