首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么哨兵不订阅sentinelReconnectInstance中的“sentinelReconnectInstance”频道

为什么哨兵不订阅sentinelReconnectInstance中的“sentinelReconnectInstance”频道
EN

Stack Overflow用户
提问于 2020-10-22 12:25:13
回答 1查看 279关注 0票数 0

当查看Redis的源代码时,我发现当sentinelRedisInstanceSRI_SENTINEL时,sentinelReconnectInstance不会初始化它的link->pc,也不会订阅通道"__sentinel__:hello",如下所示。

代码语言:javascript
复制
void sentinelReconnectInstance(sentinelRedisInstance *ri) {
    ...

    if ((ri->flags & (SRI_MASTER|SRI_SLAVE)) && link->pc == NULL) {
    ...
            retval = redisAsyncCommand(link->pc,
                sentinelReceiveHelloMessages, ri, "%s %s",
                sentinelInstanceMapCommand(ri,"SUBSCRIBE"),
                SENTINEL_HELLO_CHANNEL);
    ...

因此,我认为哨兵无法从"__sentinel__:hello"频道获得任何消息。

然而,在redis的文档中,它说

每个哨兵都订阅每个主机和副本的Pub/Sub通道sentinel:hello,寻找未知的哨兵。当检测到新的哨兵时,它们将被添加为该大师的哨兵。

我认为这意味着所有哨兵实际上都订阅了"__sentinel__:hello"频道,但在redis的源代码中看不到任何相应的实现。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-23 01:30:46

如果我错了就纠正我。

sentinelRedisInstance类型的SRI_MASTER连接到该哨兵正在监视的主节点,类型为SRI_SLAVEsentinelRedisInstance连接到从节点,而SRI_SENTINEL类型的sentinelRedisInstance连接到其他哨兵。

没有必要订阅哨兵的通道,相反,哨兵只需要订阅主从节点的通道。如果有一个新的哨兵,它将发布hello消息给主人和奴隶的频道。以便其他哨兵能发现他们。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64482163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档