云计算百科
云计算领域专业知识百科平台

微服务 - 博文正在补充中

微服务将单体服务拆开,代码也自然分离。 此文为多仓库模式( Multirepo) : 一个服务在一个目录

采用gRPC协议 在这里插入图片描述 gRPC是一个由 Google 开发的远程过程调用(RPC)框架,基于HTTP/2。它使用 Protobuf 作为默认的序列化格式。

Protobuf 是 Google 设计的数据序列化格式,用于结构化数据的序列化和反序列化。使用 .proto 文件定义消息结构,然后通过编译器生成相应语言的代码。

一: 环境准备

执行命令安装插件:

go install google.golang.org/protobuf/cmd/protocgengo@latest
go install google.golang.org/grpc/cmd/protocgengogrpc@latest
//go get 和 go install 命令的使用场景:
当你需要获取一个包的源代码并可能需要对其进行修改时,使用 go get。
当你需要编译并安装一个包,以便使用它的可执行文件或库文件时,使用 go install。

Proto文件编译及相关插件简介 – 主要工具
  • protoc 编译器,用于将 *.proto 文件编译成代码。
  • protoc-gen-go 插件,用于生成Go语言的数据结构代码。
  • protoc-gen-go-grpc 另一个插件,用于生成Go语言的gRPC服务代码。 这三个工具共同支持在Go语言环境中使用protobuf和gRPC。
  • 命令示例

    protoc –go_out=. –go-grpc_out=. *.proto

    –go_out=. 其中的. 是你要编译的 .proto 文件目录为当前目录,按需修改 –go-grpc_out=. 其中的. 是你生成 .pb.go 文件的目录,按需修改 *.proto 其中的 * 是编译当前目录下的所有 .proto 文件,也可以单独指定为 xxx.proto 文件

    1: protoc 安装
    • https://github.com/protocolbuffers/protobuf/tags
    • go env -w GOOS=windows(设置完之后,记得还原)
    • 复制bin目录下的protoc.exe文件到 $GOBIN 目录下
    • 注意:GOBIN 为 $GOPATH/bin,如果你的 $GOPATH 不在 $PATH 中,你需要将其添加到 $PATH 中
    • 验证 protoc –version
    2: protoc-gen-go 安装
    • https://github.com/protocolbuffers/protobuf-go/tags
    • 配置环境变量同上
    • 然后验证: protoc-gen-go –version
    • 或 安装方法二: go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.36.6
    3: protoc-gen-go-grpc 安装
    • 确认环境变量中包含了GOPATH和GOBIN
    • 执行命令go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.5.1安装会自动放到GOBIN下protoc-gen-go-grpc.exe
    • 验证: protoc-gen-go-grpc –version
    • 如果下载失败,可以考虑开启代理go env -w GOPROXY=https://goproxy.cn,direct
    • 或查看所有可用版本go list -m -versions google.golang.org/grpc/cmd/protoc-gen-go-grpc
    • 或查看所有可用版本 https://pkg.go.dev/google.golang.org/grpc/cmd/protoc-gen-go-grpc?tab=versions
    4: etcd 安装

    下载安装: https://github.com/etcd-io/etcd/tags 其中etcd.exe是服务端,etcdctl.exe是客户端 环境变量 验证: etcd –version 如果不习惯命令行,可以下载客户端,etcd客户端的下载地址 https://github.com/gtamas/etcdmanager/releases etcd 是一个分布式键值存储系统,常用于分布式系统中的服务发现。安装它有多种方式,这里贴出 docker-compose.yaml文件用作参考。

    version: "3.7"

    services:
    etcd:
    image: "bitnami/etcd:3.5"
    container_name: "etcd"
    restart: "always"
    ports:
    2379:2379
    environment:
    TZ=Asia/Shanghai
    ALLOW_NONE_AUTHENTICATION=yes

    如果安装成功,在浏览器访问 http://IP:2379/version,会出现以下信息:{"etcdserver": "3.5.17","etcdcluster": "3.5.0"} etcd 更多学习: https://oldme.net/article/32

    5: 数据库 安装 – 此处省略

    二: 项目部分

    1. 项目初始化

    //初始化一个名为proxima的Monorepo仓库
    1. gf init proxima m
    2. 修改 go.mod 文件的go版本号为当前版本,: go 1.23.4
    3. cd proxima
    4. gf up
    5. rm app/*

    完成后的项目结构:
    app
    hack
    hack.mk
    hack-cli.mk
    utility
    go.mod
    go.sum

    安装微服务组件

    安装grpcx组件,让GoFrame支持微服务开发。
    go get u github.com/gogf/gf/contrib/rpc/grpcx/v2

    安装数据库驱动
    go get u github.com/gogf/gf/contrib/drivers/mysql/v2

    安装etcd组件
    go get u github.com/gogf/gf/contrib/registry/etcd/v2

    建立微服务

    建立名为user的微服务,并保存在app目录下
    gf init app/user a

    将下列文件全部删除,留下一个空白的环境。 /*
    app/user/api/*
    app/user/internal/controller/*
    app/user/internal/cmd/cmd.go

    正式开发
  • 建立数据表
  • 改配置 app/user/hack/config.yaml
  • gfcli:
    gen:
    dao:
    link: "mysql:root:123456@tcp(srv.com:3306)/user"
    descriptionTag: true

    pbentity:
    link: "mysql:root:12345678@tcp(srv.com:3306)/user"

  • 生成dao模型 cd app/user && gf gen dao
  • 生成pbentity模型gf gen pbentity
  • pbentity 与 gen dao 的差别:

    • gen dao 生成的数据是go文件,主要在微服务内部使用,例如ORM操作;
    • gen pbentity生成的数据是proto文件,主要用作gRPC微服务之间的通讯。
    业务逻辑开发

    微服务的业务逻辑存放在*/internal/logic下,和单体业务一样。 app/user/internal/logic/account/account.go

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 微服务 - 博文正在补充中
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!