golang 同时(一个项目)注册http和GRPC服务

main 里面

package main

import (
    "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)
    }
    // 注册服务到consul
    reg := new(api.AgentServiceRegistration)
    reg.ID = "httpgrpc-http-service-id"
    reg.Name = "httpgrpc-http"
    reg.Tags = []string{"httpgrpc-http"}
    reg.Port = 8595
    reg.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 grpc

import (
    "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 = 8595
    reg.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
}

效果

 

posted @ 2024-06-16 00:45  酒沉吟  阅读(3)  评论(0编辑  收藏  举报