描述:
我很好奇RedisSentinelWorker和RedisPubSubServer之间的关系是什么。
根据我所观察到的,即使有更多的哨兵主机可用,库最多可容纳1个活动的哨兵连接。这个哨兵连接被包装在RedisSentinelWorker中,它将RedisPubSubServer包装在引擎盖下面。
困扰我的是,RedisSentinelWorker和RedisPubSubServer可能实际上代表着与、两个不同的哨兵的连接。
以下是发生这种情况的原因:
var sentinel = new RedisSentinel(new[] {"localhost:26380", "localhost:26381", "localhost:26382"});
var manager = sentinel.Start();当我们到达ServiceStack.Redis.RedisSentinelWorker.BeginListeningForConfigurationChanges时,监听应该从哨兵ServiceStack.Redis.RedisSentinelWorker.BeginListeningForConfigurationChanges开始。但是当您到达localhost:26381.时--我们用来建立pub/sub连接的一个实际哨兵实际上是ServiceStack.Redis.RedisPubSubServer.RunLoop。
之所以发生这种情况,是因为我们传递给ClientsManager对象的RedisPubSubServer对象下面有循环机制。在建立pub/sub连接之前,我们实际上要调用ClientsManager两次。
ServiceStack.Redis.RedisPubSubServer.Init内部获取服务器时间。它返回了localhost:26380.ServiceStack.Redis.RedisPubSubServer.RunLoop内部实际建立订阅。它现在返回localhost:26381.,所以我的问题是:这是如何工作的,现在是有意的还是这是一个bug?
发布于 2021-04-20 16:31:55
RedisPubSubServer提供了用于处理Redis /Sub消息的托管Pub/Sub服务器。
RedisSentinelWorker使用RedisPubSubServer侦听哨兵消息,它考虑连接到哨兵消息事件的任何可用活动哨兵主机,但我可以看到,只查看工作人员当前配置的哨兵主机是如何更直观的,因此我已经更改了此承诺中的行为,这将在下一个v5.11版本中可用。
https://stackoverflow.com/questions/67182389
复制相似问题