mirror of
https://gitee.com/johng/gf.git
synced 2024-12-02 04:07:47 +08:00
59 lines
1.7 KiB
Go
59 lines
1.7 KiB
Go
// Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
|
|
//
|
|
// This Source Code Form is subject to the terms of the MIT License.
|
|
// If a copy of the MIT was not distributed with this file,
|
|
// You can obtain one at https://github.com/gogf/gf.
|
|
|
|
package nacos
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/gogf/gf/v2/container/gmap"
|
|
"github.com/gogf/gf/v2/net/gsvc"
|
|
"github.com/gogf/gf/v2/text/gstr"
|
|
"github.com/joy999/nacos-sdk-go/model"
|
|
)
|
|
|
|
// NewServiceFromInstance new one service from instance
|
|
func NewServiceFromInstance(instance []model.Instance) gsvc.Service {
|
|
n := len(instance)
|
|
if n == 0 {
|
|
return nil
|
|
}
|
|
serviceName := instance[0].ServiceName
|
|
endpoints := make(gsvc.Endpoints, 0, n)
|
|
for i := 0; i < n; i++ {
|
|
if instance[0].ServiceName != serviceName {
|
|
return nil
|
|
}
|
|
endpoints = append(endpoints, gsvc.NewEndpoint(fmt.Sprintf("%s%s%d", instance[i].Ip, gsvc.EndpointHostPortDelimiter, int(instance[i].Port))))
|
|
}
|
|
if gstr.Contains(serviceName, cstServiceSeparator) {
|
|
arr := gstr.SplitAndTrim(serviceName, cstServiceSeparator)
|
|
serviceName = arr[1]
|
|
}
|
|
|
|
return &gsvc.LocalService{
|
|
Endpoints: endpoints,
|
|
Name: serviceName,
|
|
Metadata: gmap.NewStrStrMapFrom(instance[0].Metadata).MapStrAny(),
|
|
Version: gsvc.DefaultVersion,
|
|
}
|
|
}
|
|
|
|
// NewServicesFromInstances new some services from some instances
|
|
func NewServicesFromInstances(instances []model.Instance) []gsvc.Service {
|
|
serviceMap := map[string][]model.Instance{}
|
|
for _, inst := range instances {
|
|
serviceMap[inst.ServiceName] = append(serviceMap[inst.ServiceName], inst)
|
|
}
|
|
|
|
services := make([]gsvc.Service, 0, len(serviceMap))
|
|
for _, insts := range serviceMap {
|
|
services = append(services, NewServiceFromInstance(insts))
|
|
}
|
|
|
|
return services
|
|
}
|