grpc服务注册到consul中

package main

import (
   "New-lesson/account_srv/biz"
   "New-lesson/account_srv/proto/pb"
   "New-lesson/internal"
   "flag"
   "fmt"
   consulapi "github.com/hashicorp/consul/api"
   "go.uber.org/zap"
   "google.golang.org/grpc"
   "google.golang.org/grpc/health"
   "google.golang.org/grpc/health/grpc_health_v1"
   "net"
)
func main() {
   flag.Parse()
   addr := fmt.Sprintf("%s:%d", internal.ViperConf.AccountSrvConfig.Host, internal.ViperConf.AccountSrvConfig.Port)
   server := grpc.NewServer()
   pb.RegisterAccountServiceServer(server, &biz.AccountServer{}) //注册用的谁的结构体关联的方法,就用谁的结构体进行注册.
   listen, err := net.Listen("tcp", addr)
   if err != nil {
      zap.S().Error("account_srv 启动异常", err.Error())
      panic(err)
   }
   grpc_health_v1.RegisterHealthServer(server, health.NewServer()) //将已经有的server注册到grpc的健康检查中
   defaultConfig := consulapi.DefaultConfig()                      //初始化默认consul配置
   defaultConfig.Address = fmt.Sprintf("%s:%d", 
   internal.ViperConf.ConsulConfig.Host,
    internal.ViperConf.ConsulConfig.Port)

   client, err := consulapi.NewClient(defaultConfig) //生成consul注册对象
   if err != nil {
      zap.S().Error("consul.NewClient err:", err)
   }
   checkAddr := fmt.Sprintf("%s:%d", internal.ViperConf.AccountSrvConfig.Host, internal.ViperConf.AccountSrvConfig.Port)
   //checkAddr 是注册服务的地址.不是consul的服务地址用于注册服务的监控检测
   registration := consulapi.AgentServiceRegistration{
      ID:   internal.ViperConf.AccountSrvConfig.SrvName, //grpc服务的id
      Name: internal.ViperConf.AccountSrvConfig.SrvName, //grpc服务的Name
      Tags: internal.ViperConf.AccountSrvConfig.Tags,    //grpc服务的Tags
      Port: internal.ViperConf.AccountSrvConfig.Port,    //grpc服务的 端口号
      //Address: defaultConfig.Address,
      Address: internal.ViperConf.AccountSrvConfig.Host, //这里的地址是注册服务的地址.不是consul的地址.
      Check: &consulapi.AgentServiceCheck{
         Interval:                       "1s",      //监控检测间隔时间
         Timeout:                        "3s",      //监控检测超时时间
         GRPC:                           checkAddr, //grpc服务对应的地址和端口号
         DeregisterCriticalServiceAfter: "10s",     //超过这个时间后自动将注册服务从consul中删除 ..
         //删除时间过长.会有缓存导致服务注册有问题.
      },
   } //告诉consul要注册服务的配置信息
   err = client.Agent().ServiceRegister(&registration)
   if err != nil {
      zap.S().Error("srv服务注册失败.", err)
   }
   err = server.Serve(listen)
   if err != nil {
      panic(err)
   }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值