nats streaming发布

我这里分析的是由nats streaming启动nats的,不连接外部nats

1.在nats streaming第一章,已经说明nats streaming会启动客户端连接nats,然后注册消息回调,包括客户端连接,订阅,发布等消息回调

2.订阅客户端发送订阅消息,服务端调用readLoop()进行消息读取,c.parse消息解析,processMsg(解析出事件,这里是解析出发布事件,消息转发到nats streaming)

for循环调用订阅事件监听者,

3.上面都还算是nats服务器调用,接着消息转发到nats streaming,readLoop->(nc *Conn) processMsgArgs(在这里确定事件的调用者,这里认为有个设计不好的地方,事件调用者确认是通过nc.ps.ma.sid,而这个值是按依赖于初始化自增的,个人认为固定事件id更好,而不是依赖于初始化顺序,在这里发布事件的sid是3)->(nc *Conn) processMsg(把消息丢入sub.pHead队列)->(nc *Conn) waitForMsgs(循环取出队列消息进行处理,调用mcb(m)进行事件注册回调)->(s *StanServer) processClientPublish(这里不同于定位,经过一些合法性校验后把消息体丢入通道s.ioChannel处理),此次发布就算结束了。

4.通道监听函数(s *StanServer) startIOLoop()处理发布,storeIOPendingMsgs持久化存储,(s *StanServer) processMsg(消息处理)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值