带你十天轻松搞定 Go 微服务系列

Posted 微服务实践

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带你十天轻松搞定 Go 微服务系列相关的知识,希望对你有一定的参考价值。

我们通过一个系列文章跟大家详细展示一个 go-zero 微服务示例,整个系列分十篇文章,目录结构如下:

  1. 环境搭建:带你十天轻松搞定 Go 微服务系列(一)
  2. 服务拆分:带你十天轻松搞定 Go 微服务系列(二)
  3. 用户服务:带你十天轻松搞定 Go 微服务系列(三)
  4. 产品服务:带你十天轻松搞定 Go 微服务系列(四)
  5. 订单服务(本文)
  6. 支付服务
  7. RPC 服务 Auth 验证
  8. 服务监控
  9. 链路追踪
  10. 分布式事务

期望通过本系列带你在本机利用 Docker 环境利用 go-zero 快速开发一个商城系统,让你快速上手微服务。

完整示例代码:https://github.com/nivin-studio/go-zero-mall

首先,我们来看一下整体的服务拆分图:

  • 进入服务工作区
  • 创建 sql 文件
  • $ vim model/order.sql
  • 编写 sql 文件
  • 创建 api 文件
  • $ vim api/order.api
  • 编写 api 文件
  • 创建 proto 文件
  • $ vim rpc/order.proto
  • 编写 proto 文件
  • syntax = "proto3";

    package orderclient;

    option go_package = "order";

    // 订单创建
    message CreateRequest
    int64 Uid = 1;
    int64 Pid = 2;
    int64 Amount = 3;
    int64 Status = 4;

    message CreateResponse
    int64 id = 1;

    // 订单创建

    // 订单修改
    message UpdateRequest
    int64 id = 1;
    int64 Uid = 2;
    int64 Pid = 3;
    int64 Amount = 4;
    int64 Status = 5;

    message UpdateResponse

    // 订单修改

    // 订单删除
    message RemoveRequest
    int64 id = 1;

    message RemoveResponse

    // 订单删除

    // 订单详情
    message DetailRequest
    int64 id = 1;

    message DetailResponse
    int64 id = 1;
    int64 Uid = 2;
    int64 Pid = 3;
    int64 Amount = 4;
    int64 Status = 5;

    // 订单详情

    // 订单列表
    message ListRequest
    int64 uid = 1;

    message ListResponse
    repeated DetailResponse data = 1;

    // 订单列表

    // 订单支付
    message PaidRequest
    int64 id = 1;

    message PaidResponse

    // 订单支付

    service Order
    rpc Create(CreateRequest) returns(CreateResponse);
    rpc Update(UpdateRequest) returns(UpdateResponse);
    rpc Remove(RemoveRequest) returns(RemoveResponse);
    rpc Detail(DetailRequest) returns(DetailResponse);
    rpc List(ListRequest) returns(ListResponse);
    rpc Paid(PaidRequest) returns(PaidResponse);

  • 运行模板生成命令
  • $ goctl rpc proto -src ./rpc/order.proto -dir ./rpc
    服务配置,mysql 服务配置,CacheRedis 服务配置
    服务配置,CacheRedis 服务配置的实例化
    $ vim rpc/internal/config/config.go
    的依赖
    $ vim rpc/internal/svc/servicecontext.go
    服务配置
    $ vim rpc/etc/order.yaml
    服务配置的实例化
    $ vim rpc/internal/config/config.go
    的依赖
    $ vim rpc/internal/svc/servicecontext.go
    服务查询验证用户是否存在,再通过调用 product rpc 服务查询验证产品是否存在,以及判断产品库存是否充足。验证通过后,创建用户订单,并通过调用 product rpc 服务更新产品库存。

    $ vim rpc/internal/logic/createlogic.go
    查询用户所有订单的 OrderModel 方法 FindAllByUid
    $ vim model/ordermodel.go
    服务配置,CacheRedis 服务配置,Auth 验证配置
    服务配置
    $ vim api/etc/order.yaml
    服务配置的实例化
    $ vim api/internal/config/config.go
    的依赖
    $ vim api/internal/svc/servicecontext.go

    !提示:启动服务需要在 golang 容器中启动

    !提示:启动服务需要在 golang 容器中启动

    https://github.com/zeromicro/go-zero

    欢迎使用 go-zerostar 支持我们!

    关注『微服务实践』公众号并点击 交流群 获取社区群二维码。

    带你十天轻松搞定 Go 微服务系列(九链路追踪)

    我们通过一个系列文章跟大家详细展示一个 go-zero 微服务示例,整个系列分十篇文章,目录结构如下:

    1. 环境搭建:带你十天轻松搞定 Go 微服务系列(一)
    2. 服务拆分:带你十天轻松搞定 Go 微服务系列(二)
    3. 用户服务:带你十天轻松搞定 Go 微服务系列(三)
    4. 产品服务:带你十天轻松搞定 Go 微服务系列(四)
    5. 订单服务:带你十天轻松搞定 Go 微服务系列(五)
    6. 支付服务:带你十天轻松搞定 Go 微服务系列(六)
    7. RPC 服务 Auth 验证:带你十天轻松搞定 Go 微服务系列(七)
    8. 服务监控:带你十天轻松搞定 Go 微服务系列(八、服务监控)
    9. 链路追踪介绍

      JaegerUber 开发并开源的一款分布式追踪系统,兼容 OpenTracing API,适用于以下场景:

    10. 分布式跟踪信息传递
    11. 分布式事务监控
    12. 问题分析
    13. 服务依赖性分析
    14. 性能优化
    15. Jaeger 的全链路追踪功能主要由三个角色完成:

    16. client:负责全链路上各个调用点的计时、采样,并将 tracing 数据发往本地 agent
    17. agent:负责收集 client 发来的 tracing 数据,并以 thrift 协议转发给 collector
    18. collector:负责搜集所有 agent 上报的 tracing 数据,统一存储。
    19. go-zero 框架已经帮我们实现了链路追踪(详见:go-zero链路追踪),并且集成支持了 JaegerZipkin 这两种链路追踪上报工具,我们只要简单配置下,就可以可视化的查看到一个请求的完整的调用链,以及每一个环节的调用情况及性能。

      服务 Telemetry 配置服务 Telemetry 配置服务 Telemetry 配置服务 Telemetry 配置服务 Telemetry 配置服务 Telemetry 配置服务 Telemetry 配置服务 Telemetry 配置
    20. 访问 /api/user/userinfo api接口
    21. 第一章 环境搭建 中我们集成了 Jaeger 服务,并为其 Jaeger UI 端口号16686 做了宿主机端口 5000 的映射关系,所以在浏览器中输入 http://127.0.0.1:5000/ 访问 Jaeger UI 界面。选择 Search 菜单,在 Service 下拉框中选择 user.api,最后点击 Find Traces 按钮,可以查询到刚刚访问的 /api/user/userinfo 接口的链路追踪数据。
    22. 点击进去,就可以看到这个 /api/user/userinfo 接口的链路时序图,以及服务依赖关系,和耗时情况。
    23. 右上角的下拉菜单可以选择不同的数据展示样式。
    24. 其他接口链路追踪效果图
    25. https://github.com/zeromicro/go-zero

      欢迎使用 go-zerostar 支持我们!

      关注『微服务实践』公众号并点击 交流群 获取社区群二维码。

      以上是关于带你十天轻松搞定 Go 微服务系列的主要内容,如果未能解决你的问题,请参考以下文章

      带你十天轻松搞定 Go 微服务系列

      带你十天轻松搞定 Go 微服务系列

      带你十天轻松搞定 Go 微服务系列

      从零开始,轻松搞定SpringCloud微服务系列

      微服务之七:轻松搞定SpringCloud微服务-API权限控制

      微服务之四:轻松搞定SpringCloud微服务-负载均衡Ribbon

    (c)2006-2024 SYSTEM All Rights Reserved IT常识