-
Notifications
You must be signed in to change notification settings - Fork 0
/
impl.go
83 lines (76 loc) · 2.3 KB
/
impl.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package consul_rc
import (
"context"
"fmt"
"net"
"github.com/coffeehc/base/errors"
"github.com/coffeehc/boot/configuration"
"github.com/coffeehc/boot/plugin/rpc"
"github.com/hashicorp/consul/api"
"github.com/spf13/viper"
)
type serviceImpl struct {
client *api.Client
}
func newService() *serviceImpl {
// service := consul.GetService()
impl := &serviceImpl{
// client: service.GetConsulClient(),
}
return impl
}
func (impl *serviceImpl) CheckDeregister(checkId string) {
agent := impl.client.Agent()
agent.CheckDeregister(checkId)
}
func (impl *serviceImpl) Register(ctx context.Context, serviceInfo configuration.ServiceInfo) error {
if ctx.Err() != nil {
return errors.MessageError("服务注册已经关闭")
}
agent := impl.client.Agent()
rpcServerAddr := rpc.GetService().GetRPCServerAddr()
addr, err := net.ResolveTCPAddr("tcp", rpcServerAddr)
if err != nil {
return errors.SystemError("RPC服务地址解析失败")
}
meta := serviceInfo.Metadata
if meta == nil {
meta = make(map[string]string)
}
meta["Version"] = serviceInfo.Version
meta["Descriptor"] = serviceInfo.Descriptor
meta["APIDefine"] = serviceInfo.APIDefine
meta["Address"] = rpcServerAddr
for k, v := range serviceInfo.Metadata {
meta[k] = v
}
serviceId := rpc.GetService().GetRegisterServiceId()
deregisterCriticalServiceAfter := viper.GetString("register.deregisterCriticalServiceAfter")
if configuration.GetRunModel() == configuration.Model_dev && deregisterCriticalServiceAfter == "" {
deregisterCriticalServiceAfter = "30s"
}
register := &api.AgentServiceRegistration{
ID: serviceId,
Name: serviceInfo.ServiceName,
Tags: []string{configuration.GetRunModel()},
Port: addr.Port,
Address: addr.IP.String(),
Check: &api.AgentServiceCheck{
CheckID: fmt.Sprintf("%s_grpcHealth", serviceId),
Name: fmt.Sprintf("%s_grpcHealth", serviceId),
GRPC: rpcServerAddr,
Interval: "3s",
Timeout: "2s",
DeregisterCriticalServiceAfter: deregisterCriticalServiceAfter,
},
Meta: meta,
}
opts := api.ServiceRegisterOpts{
ReplaceExistingChecks: true,
}
err = agent.ServiceRegisterOpts(register, opts)
if err != nil {
return errors.SystemError(err.Error())
}
return nil
}