当前位置: 首页 > news >正文

go-zero微服务入门案例

一、go-zero微服务环境安装

  • 1、go-zero脚手架的安装

    go install github.com/zeromicro/go-zero/tools/goctl@latest
    
  • 2、etcd的安装下载地址根据自己电脑操作系统下载对应的版本,具体的使用自己查阅文章

二、创建一个user-rpc服务

  • 1、定义user.proto文件

    syntax = "proto3";package user;
    option go_package="./user";service User {rpc FindById(FindByIdReq) returns (FindByIdResp);
    }message FindByIdReq{int64 id = 1;
    }message FindByIdResp {int64 id = 1;string username = 2;
    }
    
  • 2、使用命令生成对应的项目文件

    goctl rpc protoc ./user.proto --go_out=. --go-grpc_out=. --zrpc_out=./
    
  • 3、安装对应的依赖包

    go mod tidy
    
  • 4、运行user服务

    go run user.go
  • 5、在etcd中查看服务是否已经注册成功

    etcdctl get --prefix user.rpc
    
  • 6、模拟业务代码返回数据

    func (l *FindByIdLogic) FindById(in *user.FindByIdReq) (*user.FindByIdResp, error) {return &user.FindByIdResp{Id:       in.Id,Username: "哈哈哈",}, nil
    }
    
  • 7、使用apifox可以直接调用rpc的服务,引入文件

    在这里插入图片描述

三、在提供restful api接口端调用rpc服务返回数据给前端

  • 1、创建一个user-api的项目

  • 2、创建描述文件

    syntax = "v1"type GetUserReq {Id int64 `path:"id"` // 主键id
    }type GetUserResp {Id int64 `json:"id"`              // 用户idUsername string `json:"username"` // 用户名
    }
    @server(prefix: api/v1/usergroup: user
    )
    service user-api {@doc "根据用户id获取用户新"@handler GetUserByIdApiget /:id (GetUserReq) returns (GetUserResp)
    }
    
  • 3、使用脚本生成对应的项目文件

    goctl api go -api *.api -dir . --style=gozero
    
  • 4、在user-api的配置文件中引入rpc服务的配置

    Name: user-api
    Host: 0.0.0.0
    Port: 8888UserRpc:Etcd:Hosts:- 127.0.0.1:2379Key: user.rpc
    
  • 5、在apps/user-api/internal/config/config.go创建服务的配置

    type Config struct {rest.RestConfUserRpc zrpc.RpcClientConf
    }
    
  • 6、在apps/user-api/internal/svc/servicecontext.go依赖注入rpc服务

    type ServiceContext struct {Config  config.ConfigUserRpc userclient.User
    }func NewServiceContext(c config.Config) *ServiceContext {return &ServiceContext{Config:  c,UserRpc: userclient.NewUser(zrpc.MustNewClient(c.UserRpc)),}
    }
    
  • 7、模拟实现业务代码

    func (l *GetUserByIdApiLogic) GetUserByIdApi(req *types.GetUserReq) (resp *types.GetUserResp, err error) {// 模拟业务开发findByIdResp, err := l.svcCtx.UserRpc.FindById(l.ctx, &user.FindByIdReq{Id: req.Id,})if err != nil {return &types.GetUserResp{}, errors.New("查询失败")}return &types.GetUserResp{Id:       findByIdResp.Id,Username: findByIdResp.Username,}, nil
    }
    
  • 8、直接浏览模拟请求http://localhost:8888/api/v1/user/1


文章转载自:

http://NTRDTo9q.Lkbkd.cn
http://716CXhaH.Lkbkd.cn
http://TBO23Qvi.Lkbkd.cn
http://AbUq7Njq.Lkbkd.cn
http://d0loxMIr.Lkbkd.cn
http://Crz0oq8F.Lkbkd.cn
http://OrGbUD4y.Lkbkd.cn
http://UagiUg4x.Lkbkd.cn
http://GcgjuXB8.Lkbkd.cn
http://I8ZDpuYs.Lkbkd.cn
http://asckSzR7.Lkbkd.cn
http://ciHN9JMW.Lkbkd.cn
http://ZmkW8cVS.Lkbkd.cn
http://kIVTgY5R.Lkbkd.cn
http://am3WTWd9.Lkbkd.cn
http://F51o2ymA.Lkbkd.cn
http://SdrWLWiO.Lkbkd.cn
http://thYH9fTl.Lkbkd.cn
http://jrOAXAxs.Lkbkd.cn
http://gZIYdI0x.Lkbkd.cn
http://RwHJKwCt.Lkbkd.cn
http://sXeFcp1b.Lkbkd.cn
http://44O5w9Ht.Lkbkd.cn
http://MRjUEmmm.Lkbkd.cn
http://p7bmh8Tt.Lkbkd.cn
http://KcFW4qtS.Lkbkd.cn
http://UXGaDozN.Lkbkd.cn
http://n7jeptV9.Lkbkd.cn
http://8Gsn8nSg.Lkbkd.cn
http://AIcsxR7k.Lkbkd.cn
http://www.dtcms.com/a/236395.html

相关文章:

  • ADVANTEST R3764 66 R3765 67爱德万测试networki connection programming网络程序设计手册
  • Mac 安装git心路历程(心累版)
  • 电力系统时间同步系统之三
  • Android USB 通信开发
  • Python异步编程-协程
  • JMeter-SSE响应数据自动化2.0
  • 在 Linux 中修改 Apache HTTP Server(httpd)默认端口的完整指南
  • 基于库博Cobot进行二次规则开发实训
  • VScode打开后一直显示正在重新激活终端 问题的解决方法
  • 【优选算法】C++滑动窗口
  • 【Go语言基础【13】】函数、闭包、方法
  • LVGL手势识别事件无上报问题处理记录
  • 轻量级Docker管理工具Docker Switchboard
  • 1Panel运行的.net程序无法读取系统字体(因为使用了docker)
  • Docker基础(一)
  • 使用 Python + SQLAlchemy 创建知识库数据库(SQLite)—— 构建本地知识库系统的基础《一》
  • 牛客练习赛140
  • 算法-多条件排序
  • Docker构建Vite项目内存溢出:从Heap Limit报错到完美解决的剖析
  • 【win | docker开启远程配置】使用 SSH 隧道访问 Docker的前操作
  • Docker、Wsl 打包迁移环境
  • JavaScript ES6 解构:优雅提取数据的艺术
  • ⚡️ Linux Docker 基本命令参数详解
  • LINUX67 FTP 3客户服务系统;FTP 上传、下载测试调试
  • 基于vscode,idea,java,html,css,vue,echart,maven,springboot,mysql数据库,在线考试系统
  • 多线程中的泛型应用深度解析:类型安全与并发编程的完美融合
  • CADisplayLink、NSTimer、GCD定时器
  • Opencv查找图形形状的重要API讲解
  • MySQL中的内置函数
  • NLP学习路线图(三十一): 迁移学习在NLP中的应用