Advertisement

Nats 消息总线相关介绍(二): 拓扑相关

阅读量:

相关连接

在 server.go 文件的第 109 行处 是 包含该特定 结构体 的 Server 实例 ,该实例 负责提供 Nats 服务

相关客户端连接和路由节点连接的字段如下:

复制代码
    108 // Server is our main struct.
    109 type Server struct {
    132	    clients             map[uint64]*client
    133	    routes              map[uint64]*client
    293 }

客户端连接

Nats 节点启动,按以下调用链,接受初始化客户端连接:

Server.Start -> Server.AcceptLoop -> Server.createClient

在 Server.AcceptLoop 函数中,可以了解到,启动参数:

  • host
  • port

用于监听客户端连接

路由节点监听

Nats 节点启动,按以下调用链,接受初始化路由节点:

server启动 → server routing初始化 → 处理 route 接收循环 → server生成新的 route (server.go:1765)

在 Server.startRouteAcceptLoop 函数中,可以了解到,启动参数:

  • cluster

用于路由节点的监听端口

如果有连接到这个监听端口,则会下发 INFO 协议

连接路由节点

有 2 个步骤:

  1. 连接路由节点
  2. 收到路由节点的 INFO 协议,维护 Server.routes

连接路由节点

Nats 节点启动,按以下调用链,连接路由节点:

The server initiates its operational process. Subsequently, it engages in the routing mechanism. Following this, it enters the route acceptance loop. The server then issues routing requests, and finally, it engages with the designated route.

在 Server.solicitRoutes 函数中,可以了解到,启动参数:

  • routes

每个节点,都会去连接所有 routes 指定的路由节点

INFO 协议处理

parser.go(1063) 收到 INFO 协议后,按以下调用链,处理 INFO 协议:

client.processInfo -> client.processRouteInfo -> Server.addRoute

所有 Nats 节点都是路由节点(重要)

Nats 启动时,启动参数 routes 指定了初始路由节点

常规节点,在建立与初始路由节点的连接时,在函数Server.connectToRoute内部进行操作时(即执行该操作),将该类型的消息发送至初始路由节点。

INFO 消息处理,会把该 INFO 消息进一步广播给所有其他节点

其他节点进而把它作为路由节点进行连接

即最终,Nats 集群内,都是路由节点,网状互连

全部评论 (0)

还没有任何评论哟~