1 Star 0 Fork 0

monobytes/gcore

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
registrar.go 2.86 KB
一键复制 编辑 原始数据 按行查看 历史
null 提交于 2025-01-22 18:29 +08:00 . first commit
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 &registrar{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
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/monobytes/gcore.git
git@gitee.com:monobytes/gcore.git
monobytes
gcore
gcore
v1.0.3

搜索帮助