带你十天轻松搞定go微服务系列(代码片段)

微服务实践 微服务实践     2022-11-28     414

关键词:

我们通过一个系列文章跟大家详细展示一个 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微服务系列(代码片段)

    ...务Auth验证服务监控链路追踪分布式事务期望通过本系列带你在本机利用Docker环境利用go-zero快速开发一个商城系统,让你快速上手微服务。完整示例代码:https://github.com/nivin-studio/go- 查看详情

    带你十天轻松搞定go微服务系列(代码片段)

    ...务Auth验证服务监控链路追踪分布式事务期望通过本系列带你在本机利用Docker环境利用go-zero快速开发一个商城系统,让你快速上手微服务。完整示例代码:https://github.com/nivin-studio/go- 查看详情

    程序收藏不看系列:一文轻松搞定系统限流(代码片段)

    1.我们为什么需要限流为了“反脆弱”,在微服务复杂拓扑的情况下,限流是保障服务弹性和拓扑健壮的重中之重。想一想,如果业务推出了一个秒杀活动,而你没有任何的限流措施;当你搭建了一个账号平台,而完全没有对十... 查看详情

    带你学够浪:go语言基础系列-10分钟学方法和接口(代码片段)

    ...不会刻意追求面面俱到,但该有知识点都会覆盖,目的是带你快跑赶上Golang这趟新车。最近工作上和生活上的事情都很多,这篇文章计划是周末发的, 查看详情

    微服务从代码到k8s部署应有尽有系列全集(代码片段)

    ...到上线、从代码到k8s部署、从日志到监控等各个方面的微服务完整实践。整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中间件,所用到的技术栈基本是go-zero项目组的自研组件,基本是go-zero... 查看详情

    手把手带你使用go-kit(代码片段)

    手把手带你使用go-kitgo-kit是什么Gokit是一个微服务工具包集合。利用它提供的额API和规范可以创建健壮、可维护性高的微服务体系Go-kit的三层架构1、Service这里就是我们的业务类、接口等相关信息存放2、EndPoint定义Request、Response... 查看详情

    5分钟带你快速了解微服务框架的前世今生(代码片段)

    目录原始时代青铜时代黄金时代铂金时代钻石时代星耀时代王者时代总结原始时代1969年11月,为了便于高校间共享资源,美国国防部高级研究计划管理局建立一个名为阿帕网络ARPAnet,起初只有四个节点。阿帕网起源... 查看详情

    5分钟带你快速了解微服务框架的前世今生(代码片段)

    目录原始时代青铜时代黄金时代铂金时代钻石时代星耀时代王者时代总结原始时代1969年11月,为了便于高校间共享资源,美国国防部高级研究计划管理局建立一个名为阿帕网络ARPAnet,起初只有四个节点。阿帕网起源... 查看详情

    微服务之servicefabric系列(代码片段)

    ...   AzureServiceFabric是一款分布式系统平台,可方便用户轻松打包、部署和管理可缩放的可靠微服务和容器。 ServiceFabric还解决了开发和管理云本机应用程序面临的重大难题。&n 查看详情

    go-zero成长之路—微服务电商实战系列(六条件查询)(代码片段)

    该系列源码已开源:micro-shop1.概述在产品服务版块中咱们会有分页和条件的检索查询对应的产品列表。所以咱们这边讲一下在开发过程中会出现的一些清情况:检索条件的组合分页条数的计算检索条件的sql语句格式化输... 查看详情

    程序员带你学习安卓开发,十天快速入门-基础知识

    ...学习安卓开发系列课程。下面是前三次课程列表:程序员带你学习安卓开发,十天快速入门-安卓学习必要性程序员带你学习安卓开发,十天快速入门-开发工具配置学习程序员带你学习安 查看详情

    spring入门到精通,一文带你轻松搞定spring!

    Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。本文章将深入浅出讲解Spring的核心技术IoC、AOP,剖析框架的源代码。让大家快速掌握框... 查看详情

    分分钟轻松搞定ibm系列raid5搭建

    分分钟轻松搞定IBM系列RAID5搭建按照以下图片步骤一步步可轻松完成IBM服务器RAID1、5、10等的搭建。此例是以RAID5为例,RAID1和10可举一反三。                   &n... 查看详情

    go语言系列之并发编程(代码片段)

    Go语言中的并发编程并发与并行并发:同一时间段内执行多个任务(你在用微信和两个女朋友聊天)。并行:同一时刻执行多个任务(你和你朋友都在用微信和女朋友聊天)。Go语言的并发通过goroutine实现。goroutine类似于线程,... 查看详情

    暑假第十天之每天一些题系列(代码片段)

    暑假第十天之每天一些题系列一、选择题关于如下代码,说法错误的是characX[]="abc";characY[]='a','b','c';char*szX="abc";char*szY="abc";A.acX与acY的内容可以修改B.szX与szY指向相 查看详情

    带你入门前端工程:微前端(代码片段)

    什么是微服务?先看看维基百科的定义:微服务(英语:Microservices)是一种软件架构风格,它是以专注于单一责任与功能的小型功能区块(SmallBuildingBlocks)为基础,利用模块化的方式组合出复杂的大型应用程序,各功能区块使用... 查看详情

    万字长文带你搞定linuxbt宝塔面板之外网上快速搭建苹果cms电影网站(代码片段)

    文章目录万字长文带你搞定宝塔面板一、本地搭建宝塔面板及安装ecshop1.1前言1.2面板特色功能1.3安装环境说明1.4安装BT面板1.5常用管理命令1.6BT面板一键安装LAMP/LNMP环境1.7BT面板建站及使用技巧二、阿里云上部署高清电影网站2.1.... 查看详情

    万字长文带你搞定linuxbt宝塔面板之外网上快速搭建苹果cms电影网站(代码片段)

    文章目录万字长文带你搞定宝塔面板一、本地搭建宝塔面板及安装ecshop1.1前言1.2面板特色功能1.3安装环境说明1.4安装BT面板1.5常用管理命令1.6BT面板一键安装LAMP/LNMP环境1.7BT面板建站及使用技巧二、阿里云上部署高清电影网站2.1.... 查看详情