123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- package node
- import (
- "context"
- "fmt"
- "gateway/common"
- client "go.etcd.io/etcd/client/v3"
- "log"
- "time"
- )
- // Register 注册服务
- func (n *Node) Register(serverCode string, serverPort string, serverIp ...string) (func(), error) {
- return n.RegisterWithContext(context.Background(), serverCode, serverPort, serverIp...)
- }
- // RegisterWithContext 注册服务
- func (n *Node) RegisterWithContext(ctx context.Context, serverCode string, serverPort string, domain ...string) (func(), error) {
- var err error
- var serverAddr string
- if len(domain) > 0 {
- serverAddr = domain[0]
- } else {
- ip, err := common.GetLocalIP()
- if err != nil {
- return nil, err
- }
- serverAddr = fmt.Sprintf("http://%s", ip)
- }
- //创建租约
- lease, err := n.Client.Grant(ctx, 5)
- if err != nil {
- return nil, err
- }
- //像etcd注册服务
- finalAddr := serverAddr
- if serverPort != "" {
- finalAddr = fmt.Sprintf("%s:%s", serverAddr, serverPort)
- }
- key := createServerRegisterKey(n.scheme, serverCode, finalAddr)
- _, err = n.Client.Put(ctx, key, time.Now().Format(""), client.WithLease(lease.ID))
- if err != nil {
- return nil, err
- }
- log.Println(ctx, "service registed gateway for %s success!\n", key)
- //续租约
- keepAlive, err := n.Client.KeepAlive(ctx, lease.ID)
- if err != nil {
- return nil, err
- }
- go func() {
- for {
- <-keepAlive
- }
- }()
- return func() {
- _, _ = n.Client.Revoke(ctx, lease.ID)
- }, nil
- }
|