NSQ Producer 源码分析
2019-07-29 本文已影响0人
威廉姆韦德惠达王
producer.jpg
-
NewProducer
根据 nsqd addr 和 config。内部会验证配置,设置日志和日志级别,初始化消息、返回、错误、退出的通道。 -
TcpConn
连接 nsqd 的时机可以主动使用 ping() 或者在 pub 时自动调用。连接成功后协程运行ReadLoop
,用来读取PUB
同步返回和处理Heartbeat
,再运行WriteLoop
,用来发送指令,例如PUB
、DPUB
、NOP
,最后运行Router
,封装发送指令和处理返回。准备完成后先发送MagicV2
协议头,然后发送Identify
指令。 -
PUB
,MPUB
,DPUB
都是发送消息,分别含义是单消息指令,多消息指令,延迟消息指令。发送时可以指定同步或异步。同步时等待 nsqd 返回 OK。 -
Heartbeat
由 nsqd 主动发起,间隔时间根据 HeartbeatInterval 配置而定。ReadLoop
接受到心跳请求后会发送NOP
指令
cmd 格式,例如:PUB 发送消息
cmd p1 p2 p3 ...(空格分隔,换行结尾,cmd=指令名,p(n)=代表参数)
body_len(4 字节) body_content(可能不包含 body)
返回 frame 格式,例如:nsqd 返回 OK,心跳
[x][x][x][x][x][x][x][x][x][x][x][x]...
| (int32) || (int32) || (binary)
| 4-byte || 4-byte || N-byte
-------------------------------------...
size type data