增加随机选取节点的方法

This commit is contained in:
2021-04-01 18:57:14 +08:00
parent d962588d2f
commit e3f273d757
6 changed files with 201 additions and 26 deletions

20
dispatch/abstract.go Normal file
View File

@ -0,0 +1,20 @@
// Package dispatch...
//
// Description : dispatch...
//
// Author : go_developer@163.com<张德满>
//
// Date : 2021-04-01 5:53 下午
package dispatch
import "github.com/go-developer/balance/define"
// IDispatch 负载均衡的接口定义
//
// Author : go_developer@163.com<张德满>
//
// Date : 2:44 下午 2021/4/1
type IDispatch interface {
// Get 获取一个节点
Get(nodeList []*define.SeverNode) (string, *define.Error)
}

45
dispatch/rand.go Normal file
View File

@ -0,0 +1,45 @@
// Package dispatch...
//
// Description : dispatch...
//
// Author : go_developer@163.com<张德满>
//
// Date : 2021-04-01 5:58 下午
package dispatch
import (
"fmt"
"math/rand"
"github.com/go-developer/balance/define"
)
// NewRand ...
//
// Author : go_developer@163.com<张德满>
//
// Date : 6:51 下午 2021/4/1
func NewRand() IDispatch {
return &Rand{}
}
// Rand 随机选择
//
// Author : go_developer@163.com<张德满>
//
// Date : 6:01 下午 2021/4/1
type Rand struct {
}
// Get 获取 host + 端口
//
// Author : go_developer@163.com<张德满>
//
// Date : 6:01 下午 2021/4/1
func (r Rand) Get(nodeList []*define.SeverNode) (string, *define.Error) {
if len(nodeList) == 0 {
return "", define.NewError(define.ErrorTypeNodeListEmpty, "服务器可用节点为空")
}
node := nodeList[rand.Intn(len(nodeList))]
return fmt.Sprintf("%s:%d", node.Host, node.Port), nil
}