// Package balance ... // // Description : 接口定义 // // Author : go_developer@163.com<张德满> // // Date : 2021-04-01 2:43 下午 package balance import ( "git.zhangdeman.cn/gateway/balance/abstract" "git.zhangdeman.cn/gateway/balance/define" "git.zhangdeman.cn/zhangdeman/easylock" "git.zhangdeman.cn/zhangdeman/exception" "reflect" ) // NewServer ... // // Author : go_developer@163.com<张德满> // // Date : 6:51 下午 2021/4/1 func NewServer(nodeList []*define.SeverNode, d abstract.IBalance) *Server { return &Server{ lock: easylock.NewLock(), NodeList: nodeList, Balance: d, } } // Server server 的具体配置 // // Author : go_developer@163.com<张德满> // // Date : 2:59 下午 2021/4/1 type Server struct { lock easylock.EasyLock NodeList []*define.SeverNode Balance abstract.IBalance } // Add 添加一个Server // // Author : go_developer@163.com<张德满> // // Date : 3:00 下午 2021/4/1 func (s *Server) Add(node *define.SeverNode) { _ = s.lock.Lock() defer func() { _ = s.lock.Unlock() }() s.NodeList = append(s.NodeList, node) } // Remove 移除一个server // // Author : go_developer@163.com<张德满> // // Date : 5:09 下午 2021/4/1 func (s *Server) Remove(nodeID string) { _ = s.lock.Lock() defer func() { _ = s.lock.Unlock() }() for nodeIndex, item := range s.NodeList { if item.ID == nodeID { s.NodeList = append(s.NodeList[0:nodeIndex], s.NodeList[nodeIndex:]...) break } } } // Get 按照指定策略获取一台机器 // // Author : go_developer@163.com<张德满> // // Date : 5:17 下午 2021/4/1 func (s *Server) Get() (string, exception.IException) { _ = s.lock.RLock() defer func() { _ = s.lock.RUnlock() }() return s.Balance.Get(s.NodeList) } // ChangeBalance 修改负载均衡策略 func (s *Server) ChangeBalance(d abstract.IBalance) { if nil == d { return } if reflect.ValueOf(d).IsNil() { return } s.Balance = d }