我在 Windows 上使用 ServiceStack 5.0.2 和 Redis 3.2.100。我有几个具有活动 Pub/Sub 订阅的节点,并且每秒有几个 Pub。
我注意到,如果 Redis 服务在没有物理网络连接的情况下重新启动(因此其中一个客户端无法连接到 Redis 服务),则该客户端会在网络恢复后停止接收任何消息。我们称其为“僵尸订阅者”:它认为自己仍然可以运行,但实际上从未收到消息:客户端认为它有一个连接,但服务器上的相同连接已关闭。
问题是 RedisSubscription.SubscribeToChannels 中没有抛出异常,因此我无法检测到问题以重新订阅。
我也分析了RedisPubSubServer,我想我发现了一个问题。在所描述的情况下,RedisPubSubServer 尝试重新启动(发送停止命令CTRL),但“僵尸订阅者”没有收到它,也没有重新订阅。