代码拉取完成,页面将自动刷新
package lb
import (
"fmt"
"github.com/tietang/go-eureka-client/eureka"
"strings"
)
type Apps struct {
Client *eureka.Client
}
func (a *Apps) Get(appName string) *App {
var app *eureka.Application
for _, a := range a.Client.Applications.Applications {
if a.Name == strings.ToUpper(appName) {
app = &a
break
}
}
if app == nil {
return nil
}
na := &App{
Name: app.Name,
Instances: make([]*ServerInstance, 0),
lb: &RoundRobinBalancer{},
}
for _, ins := range app.Instances {
var port int
if ins.SecurePort.Enabled {
port = ins.SecurePort.Port
} else {
port = ins.Port.Port
}
si := &ServerInstance{
InstanceId: ins.InstanceId,
AppName: appName,
Status: Status(ins.Status),
Address: fmt.Sprintf("%s:%d", ins.IpAddr, port),
Metadata: make(map[string]string),
}
si.Metadata["rpcAddr"] = fmt.Sprintf("%s:%s", ins.IpAddr, ins.Metadata.Map["rpcPort"])
na.Instances = append(na.Instances, si)
}
return na
}
type App struct {
Name string
Instances []*ServerInstance
lb Balancer
}
func (a *App) Get(key string) *ServerInstance {
ins := a.lb.Next(key, a.Instances)
return ins
}
//服务实例的状态
type Status string
const (
StatusEnabled Status = "enabled"
StatusDisabled Status = "disabled"
)
//服务实例
type ServerInstance struct {
InstanceId string
AppName string
Address string
Status Status
Metadata map[string]string
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。