当前仓库属于暂停状态,部分功能使用受限,详情请查阅 仓库状态说明
2 Star 0 Fork 1

JUMEI_ARCH / go-plugins
暂停

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
marshalling.go 2.38 KB
一键复制 编辑 原始数据 按行查看 历史
package eureka
import (
"encoding/json"
"errors"
"fmt"
"strings"
"github.com/hudl/fargo"
"github.com/micro/go-micro/registry"
)
func appToService(app *fargo.Application) []*registry.Service {
serviceMap := make(map[string]*registry.Service)
for _, instance := range app.Instances {
id := instance.Id()
addr := instance.IPAddr
port := instance.Port
var version string
var metadata map[string]string
var endpoints []*registry.Endpoint
// get version
k, err := instance.Metadata.GetString("version")
if err != nil {
continue
}
k, err = instance.Metadata.GetString("endpoints")
if err == nil {
json.Unmarshal([]byte(k), &endpoints)
}
k, err = instance.Metadata.GetString("metadata")
if err == nil {
json.Unmarshal([]byte(k), &metadata)
}
// get existing service
service, ok := serviceMap[version]
if !ok {
// create new if doesn't exist
service = &registry.Service{
Name: strings.ToLower(app.Name),
Version: version,
Endpoints: endpoints,
}
}
// append node
service.Nodes = append(service.Nodes, &registry.Node{
Id: id,
Address: addr,
Port: port,
Metadata: metadata,
})
// save
serviceMap[version] = service
}
var services []*registry.Service
for _, service := range serviceMap {
services = append(services, service)
}
return services
}
// only parses first node
func serviceToInstance(service *registry.Service) (*fargo.Instance, error) {
if len(service.Nodes) == 0 {
return nil, errors.New("Require nodes")
}
node := service.Nodes[0]
instance := &fargo.Instance{
App: service.Name,
HostName: node.Address,
IPAddr: node.Address,
VipAddress: node.Address,
SecureVipAddress: node.Address,
Port: node.Port,
Status: fargo.UP,
UniqueID: func(i fargo.Instance) string {
return fmt.Sprintf("%s:%s", node.Address, node.Id)
},
DataCenterInfo: fargo.DataCenterInfo{Name: fargo.MyOwn},
}
// set version
instance.SetMetadataString("version", service.Version)
// set instance ID
instance.SetMetadataString("instanceId", node.Id)
// set endpoints
if b, err := json.Marshal(service.Endpoints); err == nil {
instance.SetMetadataString("endpoints", string(b))
}
// set metadata
if b, err := json.Marshal(node.Metadata); err == nil {
instance.SetMetadataString("metadata", string(b))
}
return instance, nil
}
Go
1
https://gitee.com/JMArch/go-plugins.git
git@gitee.com:JMArch/go-plugins.git
JMArch
go-plugins
go-plugins
v0.14.1

搜索帮助