微服务架构(从无到有)二.第一个微服务micro+gin+consul Demo 网关(我理解是,确切名称待定)开发

现在客户端服务端都创建出来了,接下来要做的就是打通两者

1.user_srv.pd.micro.go
里面
改成

//	api "github.com/micro/micro/v3/service/api"
//	client "github.com/micro/micro/v3/service/client"
//	server "github.com/micro/micro/v3/service/server"
api "github.com/micro/go-micro/v2/api"
client "github.com/micro/go-micro/v2/client"
server "github.com/micro/go-micro/v2/server"

2.编辑 global/global.go

package global
import (
   proto "user_api/proto"

   "github.com/micro/go-micro/v2/registry"
   "github.com/micro/go-plugins/registry/consul/v2"
)

var (
   //consul链接
   ConsulClient  = consul.NewRegistry(registry.Addrs("127.0.0.1:8500"))
   //网关链接
   UserSrvClient proto.UserSrvService
)

3.创建initialize 目录
mkdir initialize
cd initialize
vim srv_conn.go

package initialize

import (
   "user_api/global"

   "github.com/micro/go-micro/v2"

   "go.uber.org/zap"

   proto "user_api/proto"
)

func InitSrvConn() {
   consulReg := global.ConsulClient

   Services := micro.NewService(
   	micro.Name("user.client.api"),
   	micro.Registry(consulReg),
   )

   userService := proto.NewUserSrvService("user.srv", Services.Client())
   zap.S().Debug("测试链接", userService)

   global.UserSrvClient = userService
}

编辑日志配置
vim logger.go

package initialize

import "go.uber.org/zap"

func InitLogger() {
   logger, _ := zap.NewDevelopment()
   zap.ReplaceGlobals(logger)
}

4.编辑main.go
增加

//1. 初始化logger
initialize.InitLogger()

//2. 初始化srv的连接
initialize.InitSrvConn()
package main

import (
   "user_api/global"
   "user_api/initialize"
   "user_api/routers"

   "github.com/micro/go-micro/v2/web"
)

func main() {

   //1. 初始化logger
   initialize.InitLogger()

   //2. 初始化srv的连接
   initialize.InitSrvConn()

   //3. 初始化routers
   ginRouter := routers.InitRouters()

   consulReg := global.ConsulClient

   //注册服务
   microService := web.NewService(
   	web.Name("user.client"),
   	web.Address(":18001"),
   	web.Registry(consulReg),
   	web.Handler(ginRouter),
   )
   err := microService.Run()
   if err != nil {
   	return
   }

}

5.编辑api/user.go

package api

import (
	"context"
	"net/http"
	"user_api/global"
	proto "user_api/proto"

	"github.com/gin-gonic/gin"
)

func GetUserInfo(ctx *gin.Context) {
	res, err := global.UserSrvClient.GetUserInfo(context.TODO(), &proto.RequestUserId{UserId: 1})
	if err != nil {
		ctx.JSON(http.StatusForbidden,
			gin.H{
				"code":   200,
				"err":    err,
				"Client": global.UserSrvClient,
			})
		return
	}
	ctx.JSON(http.StatusOK,
		gin.H{
			"code":     200,
			"total":    "ok",
			"accounts": res,
		})

	ctx.JSON(http.StatusOK,
		gin.H{
			"code":     200,
			"total":    "ok",
			"accounts": "获取用户信息",
		})
}

重新启动,main.go,此时两个服务已打通
http://127.0.0.1:18001/getUserInfo/

项目地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天意~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值