producer.jpg
NewProducer
根據(jù) nsqd addr 和 config领炫。內(nèi)部會驗證配置,設置日志和日志級別遗增,初始化消息叫惊、返回、錯誤做修、退出的通道霍狰。TcpConn
連接 nsqd 的時機可以主動使用 ping() 或者在 pub 時自動調(diào)用。連接成功后協(xié)程運行ReadLoop
饰及,用來讀取PUB
同步返回和處理Heartbeat
蔗坯,再運行WriteLoop
,用來發(fā)送指令燎含,例如PUB
宾濒、DPUB
、NOP
屏箍,最后運行Router
绘梦,封裝發(fā)送指令和處理返回。準備完成后先發(fā)送MagicV2
協(xié)議頭赴魁,然后發(fā)送Identify
指令卸奉。PUB
,MPUB
,DPUB
都是發(fā)送消息,分別含義是單消息指令颖御,多消息指令榄棵,延遲消息指令。發(fā)送時可以指定同步或異步。同步時等待 nsqd 返回 OK疹鳄。Heartbeat
由 nsqd 主動發(fā)起拧略,間隔時間根據(jù) HeartbeatInterval 配置而定。ReadLoop
接受到心跳請求后會發(fā)送NOP
指令
cmd 格式尚辑,例如:PUB 發(fā)送消息
cmd p1 p2 p3 ...(空格分隔辑鲤,換行結尾,cmd=指令名杠茬,p(n)=代表參數(shù))
body_len(4 字節(jié)) 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