代码拉取完成,页面将自动刷新
package nacos
import (
"context"
"gitee.com/monobytes/gcore/gencoding/json"
"gitee.com/monobytes/gcore/gerrors"
"gitee.com/monobytes/gcore/gregistry"
"gitee.com/monobytes/gcore/gutils/gconv"
"github.com/nacos-group/nacos-sdk-go/v2/vo"
"net"
"net/url"
"strconv"
)
const (
metaFieldID = "id"
metaFieldName = "name"
metaFieldKind = "kind"
metaFieldAlias = "alias"
metaFieldState = "state"
metaFieldRoutes = "routes"
metaFieldEvents = "events"
metaFieldWeight = "weight"
metaFieldServices = "services"
metaFieldEndpoint = "endpoint"
)
type registrar struct {
registry *Registry
}
func newRegistrar(registry *Registry) *registrar {
return ®istrar{registry: registry}
}
// 注册服务
func (r *registrar) register(ctx context.Context, ins *gregistry.ServiceInstance) error {
host, port, err := r.parseHostPort(ins.Endpoint)
if err != nil {
return err
}
routes, err := json.Marshal(ins.Routes)
if err != nil {
return err
}
events, err := json.Marshal(ins.Events)
if err != nil {
return err
}
services, err := json.Marshal(ins.Services)
if err != nil {
return err
}
param := vo.RegisterInstanceParam{
Ip: host,
Port: port,
Weight: 1,
Enable: true,
Healthy: true,
Ephemeral: true,
ServiceName: ins.Name,
ClusterName: r.registry.opts.clusterName,
GroupName: r.registry.opts.groupName,
Metadata: map[string]string{
metaFieldID: ins.ID,
metaFieldName: ins.Name,
metaFieldKind: ins.Kind,
metaFieldAlias: ins.Alias,
metaFieldState: ins.State,
metaFieldRoutes: string(routes),
metaFieldEvents: string(events),
metaFieldServices: string(services),
metaFieldEndpoint: ins.Endpoint,
metaFieldWeight: gconv.String(ins.Weight),
},
}
ok, err := r.registry.opts.client.RegisterInstance(param)
if err != nil {
return err
}
if !ok {
return gerrors.New("service instance register fail")
}
return nil
}
// 解注册服务
func (r *registrar) deregister(ctx context.Context, ins *gregistry.ServiceInstance) error {
host, port, err := r.parseHostPort(ins.Endpoint)
if err != nil {
return err
}
param := vo.DeregisterInstanceParam{
Ip: host,
Port: port,
ServiceName: ins.Name,
Cluster: r.registry.opts.clusterName,
GroupName: r.registry.opts.groupName,
Ephemeral: true,
}
ok, err := r.registry.opts.client.DeregisterInstance(param)
if err != nil {
return err
}
if !ok {
return gerrors.New("service instance deregister fail")
}
return nil
}
func (r *registrar) parseHostPort(endpoint string) (string, uint64, error) {
raw, err := url.Parse(endpoint)
if err != nil {
return "", 0, err
}
host, p, err := net.SplitHostPort(raw.Host)
if err != nil {
return "", 0, err
}
port, err := strconv.ParseUint(p, 10, 64)
if err != nil {
return "", 0, err
}
return host, port, nil
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。