NewInstancer(client Client, logger log.Logger, service string, tags []string, passingOnly bool):
a>首先初始化cache
b>調(diào)用?getInstances[s.client.Service獲取所有services,然后通過tag進行過濾,過濾后生成格式為[addr:port]的字符串切片]
c>獲取完 instances之后褪秀,就更新cache芒篷,睛低,偎谁,
d> 如果獲得的實例與cache保存的不一致剖淀,則更新肿男,并對注冊過的所有服務(wù)進行廣播介汹。
e> 最后啟動go協(xié)程,每隔10ms就去重新獲取下instance舶沛,并更新cache嘹承。
NewEndpointer(src Instancer, f Factory, logger log.Logger, options ...EndpointerOption) *DefaultEndpointer:
src.Register(se.ch)? 注冊到instance上,剛注冊就會發(fā)送當(dāng)前實例的Event(包含地址)如庭。
go se.receive() 啟動go協(xié)程叹卷,不斷地接收最新的實例地址,并對endpointCache進行更新坪它。
實操: