Fork me on GitHub

gin 集成 consul

"github.com/hashicorp/consul/api"

package initialize

import (
	"fmt"
	"github.com/hashicorp/consul/api"
	"go.uber.org/zap"
	"google.golang.org/grpc"
	"mxshop-api/user-web/global"
	"mxshop-api/user-web/proto"
)

func InitSrvConn() {
	consulinfo := global.ServerConfig.ConsulInfo
	usersrvinfo := global.ServerConfig.UserSrvInfo
	// 从注册中心获取到用户服务的信息
	cfg := api.DefaultConfig()
	cfg.Address = fmt.Sprintf("%s:%d", consulinfo.Host, consulinfo.Port)
	client, err := api.NewClient(cfg)
	if err != nil {
		panic(err)
	}
	data, err := client.Agent().ServicesWithFilter(fmt.Sprintf("Service== \"%s\"", usersrvinfo.Name))
	if err != nil {
		panic(err)
	}
	userSrvHost := ""
	userSrvPort := 0
	for _, value := range data{
		println(value)
		userSrvHost = value.Address
		userSrvPort = value.Port
	}
	if userSrvHost == "" {
		zap.S().Errorw("[GetUserList] 连接 【用户服务失败】", "msg", err.Error())
	}
	userConn, err := grpc.Dial(fmt.Sprintf("%s:%d", userSrvHost, userSrvPort), grpc.WithInsecure())
	if err != nil {
		zap.S().Errorw("[GetUserList]链接[用户服务失败]", "msg", err.Error(),
		)
	}

	// 问题
	// 1. 后续的用户服务下线、 改端口了、 改ip了、 (负载均衡来做)
	// 3. 一个连接多个groutine共用, 性能 --- 连接池
	userSrvClient := proto.NewUserClient(userConn)
	global.UserSrvClient = userSrvClient
}
grpc pool
posted @ 2021-10-14 15:02  myboran  阅读(285)  评论(0)    收藏  举报