servicestack RedisSentineWorker和RedisPubSubServer之间的ServiceStack.Redis关系
说明: 我很好奇RedisSentineWorker和RedisPubSubServer之间的关系 从我观察到的情况来看,即使有更多的sentinel主机可用,该库最多只能容纳1个活动sentinel连接。该sentinel连接被包装在RedisSentineWorker中,它将RedisPubSubServer包装在引擎盖下 让我烦恼的是,RedisSentineWorker和RedisPubSubServer实际上可能表示到两个不同Sentinel的连接 这就是为什么会发生这种情况:
servicestack RedisSentineWorker和RedisPubSubServer之间的ServiceStack.Redis关系,
servicestack,
servicestack.redis,
servicestack,
servicestack.redis,说明: 我很好奇RedisSentineWorker和RedisPubSubServer之间的关系 从我观察到的情况来看,即使有更多的sentinel主机可用,该库最多只能容纳1个活动sentinel连接。该sentinel连接被包装在RedisSentineWorker中,它将RedisPubSubServer包装在引擎盖下 让我烦恼的是,RedisSentineWorker和RedisPubSubServer实际上可能表示到两个不同Sentinel的连接 这就是为什么会发生这种情况: var
var sentinel = new RedisSentinel(new[] {"localhost:26380", "localhost:26381", "localhost:26382"});
var manager = sentinel.Start();
当我们到达ServiceStack.Redis.RedissentineWorker.BeginListingforConfigurationChanges时
监听应该从sentinel本地主机26380开始。但当您访问ServiceStack.Redis.RedisPubSubServer.RunLoop时,我们用来建立发布/订阅连接的实际哨兵实际上是本地主机:26381
这是因为传递给RedisPubSubServer的ClientsManager
对象下面有循环机制。在建立发布/订阅连接之前,我们实际上调用了ClientsManager
两次
ServiceStack.Redis.RedisPubSubServer.Init的内部获取服务器时间。它返回了本地主机:26380
ServiceStack.Redis.RedisPubSubServer.RunLoop中实际建立订阅。它现在返回localhost:26381
所以我的问题是:这是故意的还是一个bug?
RedisPubSubServer
提供了一个用于处理Redis发布/订阅消息的托管服务器
RedisSentineWorker
使用RedisPubSubServer
侦听sentinel消息,它正在考虑为Sentinel消息事件连接到任何可用的活动Sentinel主机,但我可以看出,仅查看worker当前配置的Sentinel主机将更加直观,因此我已经更改了在下一个v5.11版本中可用的行为