router启动后,会找是否有别的router,然后相互构建一个集群。
过程是以下函数实现
//把本地的订阅 消息发送给远端的router
func (s *Server) sendSubsToRoute(route *client) {
// Send over our account subscriptions.
var _accs [4096]*Account
accs := _accs[:0]
// copy accounts into array first
s.mu.Lock()
//并发需要,空间换时间
for _, a := range s.accounts {
accs = append(accs, a)
}
s.mu.Unlock()
var raw [4096]*subscription
var closed bool
route.mu.Lock()
for _, a := range accs {
subs := raw[:0]
a.mu.RLock()
//从每个账户的每个远程实体(entry)中,随机的找出一个远端的链接,同步订阅信息过去
for key, rme := range a.rm {
// FIXME(dlc) - Just pass rme around.
// Construct a sub on the fly. We need to place
// a client (or im) to properly set the account.
var qn []byte
subEnd := len(key)
if qi := rme.qi; qi > 0 {
subEnd = int(qi) - 1
nats源码阅读记录--订阅主题扩算
最新推荐文章于 2024-05-01 12:17:07 发布