nats源码阅读记录--订阅主题扩算

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
     
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值