main 里面
package mainimport ("fmt""github.com/gin-gonic/gin""github.com/hashicorp/consul/api"grpc "gorm_project/grpc/services""gorm_project/route""gorm_project/utils""log""net/http" )func main() {// **************协程开始Grpc服务 **************************go grpc.RunGrpc()utils.InitRedisClient()r := gin.Default()// ****** consul健康检查服务 *******r.GET("/health", func(c *gin.Context) { c.String(http.StatusOK, "OK") })//r.Use(middleware.ValiTokenMiddleware()) route.AddGoodsRoute(r)route.AddOrderInfo(r)// *************注册服务到consul **********************client, regId, err := ConsulRegister()if err != nil {return} else { // 注销 consul 服务defer client.Agent().ServiceDeregister(regId)}r.Run(":8595") }// ***************注册服务到consul 方法*********************** func ConsulRegister() (*api.Client, string, error) {// 创建Consul客户端config := api.DefaultConfig()config.Address = "39.101.194.250:8500" // Consul服务器地址client, err := api.NewClient(config)if err != nil {log.Fatal(err)}// 注册服务到consulreg := new(api.AgentServiceRegistration)reg.ID = "httpgrpc-http-service-id"reg.Name = "httpgrpc-http"reg.Tags = []string{"httpgrpc-http"}reg.Port = 8595reg.Address = "127.0.0.1"reg.Check = &api.AgentServiceCheck{HTTP: fmt.Sprintf("http://localhost:%d/health", reg.Port),Timeout: "5s",Interval: "10s",DeregisterCriticalServiceAfter: "30s",}err = client.Agent().ServiceRegister(reg)return client, reg.ID, err }
协程里的GRPC 注册到consul
package grpcimport ("context""fmt""github.com/hashicorp/consul/api"pb "gorm_project/grpc/services/proto""log""net""google.golang.org/grpc" )type Server struct {pb.UnimplementedGreeterServer }func (s *Server) SayHello(cxt context.Context, r *pb.HelloRequest) (h *pb.HelloReply, e error) {return &pb.HelloReply{Message: "好样的"}, nil }func RunGrpc() {fmt.Println("开始监听了~~~~~")// 1.开始监听listen, err := net.Listen("tcp", ":9868")if err != nil {fmt.Println("listen err:", err)return}defer listen.Close()// 2.创建GRPC 服务server := grpc.NewServer()// 3.将服务和实例注册 ******** 注意 pb 取于.proto 里的 option go_package = "./;pb"; ********pb.RegisterGreeterServer(server, &Server{})// *************注册服务到consul **********************client, regId, err := ConsulRegister()if err != nil {return} else { // 注销 consul 服务defer client.Agent().ServiceDeregister(regId)}// 4.服务开始监听errs := server.Serve(listen)if errs != nil {fmt.Println("服务出错 err:", err)return}//time.Sleep(time.Second * 10) }// ***************注册服务到consul 方法*********************** func ConsulRegister() (*api.Client, string, error) {// 创建Consul客户端config := api.DefaultConfig()config.Address = "39.101.194.250:8500" // Consul服务器地址client, err := api.NewClient(config)if err != nil {log.Fatal(err)}// 注册服务reg := new(api.AgentServiceRegistration)reg.ID = "httpgrpc-grpc-service-id"reg.Name = "httpgrpc-grpc"reg.Tags = []string{"httpgrpc-grpc"}reg.Port = 8595reg.Address = "127.0.0.1"reg.Check = &api.AgentServiceCheck{HTTP: fmt.Sprintf("http://localhost:%d/health", reg.Port),Timeout: "5s",Interval: "10s",DeregisterCriticalServiceAfter: "30s",}err = client.Agent().ServiceRegister(reg)return client, reg.ID, err }
效果