NSQ Producer 源码分析

NSQ Producer 源码分析_第1张图片
producer.jpg
  • NewProducer 根据 nsqd addr 和 config。内部会验证配置,设置日志和日志级别,初始化消息、返回、错误、退出的通道。

  • TcpConn 连接 nsqd 的时机可以主动使用 ping() 或者在 pub 时自动调用。连接成功后协程运行 ReadLoop,用来读取 PUB 同步返回和处理 Heartbeat,再运行 WriteLoop,用来发送指令,例如 PUBDPUBNOP,最后运行 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

你可能感兴趣的:(NSQ Producer 源码分析)