nats streaming订阅
我這里分析的是由nats streaming啟動nats的,不連接外部nats
1.在nats streaming第一章,已經(jīng)說明nats streaming會啟動客戶端連接nats,然后注冊消息回調(diào),包括客戶端連接,訂閱,發(fā)布等消息回調(diào)
2.訂閱客戶端發(fā)送訂閱消息,服務(wù)端調(diào)用readLoop()進(jìn)行消息讀取,c.parse消息解析,->(c *client) processSub->(c *client) processMsg
for循環(huán)調(diào)用訂閱事件監(jiān)聽者,
3.上面都還算是nats服務(wù)器調(diào)用,接著消息轉(zhuǎn)發(fā)到nats streaming,readLoop->(nc *Conn) processMsgArgs(在這里確定事件的調(diào)用者,這里認(rèn)為有個設(shè)計不好的地方,事件調(diào)用者確認(rèn)是通過nc.ps.ma.sid,而這個值是按依賴于初始化自增的,個人認(rèn)為固定事件id更好,而不是依賴于初始化順序,在這里訂閱事件的sid是4,)->(nc *Conn) processMsg(把消息丟入sub.pHead隊列)->
(nc *Conn) waitForMsgs(循環(huán)取出隊列消息進(jìn)行處理,調(diào)用mcb(m)進(jìn)行事件注冊回調(diào))->(s *StanServer) processSubscriptionRequest(處理客戶端訂閱消息s.processSub(保存到持久化存儲),訂閱回復(fù)s.ncs.Publish)
根據(jù)object名稱建立對應(yīng)通道,
?
然后把對應(yīng)訂閱對象存入通道對象(channel.ss.psubs),這里區(qū)分是永久訂閱還是臨時訂閱,
以上就是大體的nats streaming訂閱流程。
?
總結(jié)
以上是生活随笔為你收集整理的nats streaming订阅的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: redis和zk实现分布式锁的优缺点
- 下一篇: 基因编辑婴儿的意味着什么