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

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

关键词:

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

  1. 环境搭建(本文)
  2. 服务拆分
  3. 用户服务
  4. 产品服务
  5. 订单服务
  6. 支付服务
  7. RPC 服务 Auth 验证
  8. 服务监控
  9. 链路追踪
  10. 分布式事务

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

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

  • Golang 1.15+
  • Etcd
  • Redis
  • Mysql
  • Prometheus
  • Grafana
  • Jaeger
  • DTM
  • 本地开发环境搭建

    为了方便开发调试,我们使用 Docker 构建本地开发环境。WindowsmacOS 系统可下载 Docker Desktop 安装使用,具体下载安装方法可自行搜索相关教程。

    这里我们使用 Docker Compose 来编排管理我们的容器,创建如下目录:

    gonivinck
    ├── dtm                   的微服务中采用 grpc 进行服务间的通信,而 grpc 的编写就需要用到 protoc 和翻译成 go 语言 rpc stub 代码的插件 protoc-gen-go

    为了提高开发效率,减少代码的出错率,缩短业务开发的工作量,go-zero 还提供了 goctl 代码生成工具。

    因此,我们需要将 protoc, protoc-gen-go, goctl, 给提前安装到 golang 的容器中,以便后续使用。

    所以 golang 容器的 Dockerfile 代码如下:

    无需特殊处理,只要基于现有的镜像即可。

    服务基于的镜像
    DTMyedf/dtm
    Etcdbitnami/etcd
    Mysqlmysql:5.7
    Redisredis:5.0
    Mysql Managephpmyadmin/phpmyadmin
    Redis Manageerikdubbelboer/phpredisadmin
    Prometheusbitnami/prometheus
    Grafanagrafana/grafana
    Jaegerjaegertracing/all-in-one:1.28
    配置文件配置文件命令来构建和启动运行我们的服务容器,在根目录执行如下命令:
    $ docker-compose up -d
  • 容器构建中

  • Windows 系统容器构建中出现如下图所示,请选择 Share it 这将允许 Windows 的文件目录挂载到容器目录中。

  • 容器已启动运行

  • 容器中启动所有微服务,并为它们分配监听不同的端口号以示区分。
    80:开头的端口号我们将用于 api 服务
    90:开头的端口号我们将用于 rpc 服务dtm36789:36789
    36790:36790dtmdtmhttp 协议和 grpc 协议服务端口号,供客户端交互使用。
    此项目中我们只在 Docker 内部容器之间访问使用,所以也可以不暴露端口号给宿主机etcd2379:2379etcdEtcd http api 服务端口号,供客户端交互使用。
    此项目中我们只在 Docker 内部容器之间访问使用,所以也可以不暴露端口号给宿主机mysql3306:3306mysqlMysql 服务默认端口号,宿主机可通过 127.0.0.1:3306 进行数据库的连接redis6379:6379redisRedis 服务默认端口号,宿主机可通过 127.0.0.1:6379 进行数据库的连接mysql-manage1000:80mysql-managephpMyAdmin web 服务端口号,可以在宿主机 127.0.0.1:1000 访问redis-manage2000:80redis-managephpRedisAdmin web 服务端口号,可以在宿主机 127.0.0.1:2000 访问prometheus3000:9090prometheusPrometheus web 服务端口号,可以在宿主机 127.0.0.1:3000 访问grafana4000:3000grafanaGrafana web 服务端口号,可以在宿主机 127.0.0.1:4000 访问jaeger5000:16686jaegerJaeger web 服务端口号,可以在宿主机 127.0.0.1:5000 访问
    访问验证

  • Redis 访问验证

  • Prometheus 访问验证

  • Grafana 访问验证

  • Jaeger 访问验证

  • 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.... 查看详情