今天主要讲的是 NSQD 中 lookup, 其主要作用是告知 Lookupd,当前 NSQD 实例的情况,包括心跳检测,Topic 和 Channel 的变化。
主要代码文件:
1.nsqd/lookup_peer.go 主要定义了一些集群的消息的结构体和相关的实例化
type lookupPeer struct {
logf lg.AppLogFunc //日志输出函数
addr string //Lookupd 地址
conn net.Conn
state int32 //状态
connectCallback func(*lookupPeer) //连接回调
maxBodySize int64 //最大消息长度
Info peerInfo //集群伙伴元数据
}
//lookupd的信息
type peerInfo struct {
TCPPort int `json:"tcp_port"`
HTTPPort int `json:"http_port"`
Version string `json:"version"`
BroadcastAddress string `json:"broadcast_address"`
}
Command 函数 用于发布请求到Lookupd
func (lp *lookupPeer) Command(cmd *nsq.Command) ([]byte, error) {
initialState := lp.state
if lp.state != stateConnected { //如果没有连接Lookupd