Go-Micro 是分布式系统的开发框架。 由 Micro 公司开发,几经波折后发展到了 v4 版本(详见Go-Micro 不能用了?关于 Go-Micro 的一些说明),Github 仓库地址点此。请注意,现在普遍的 Go-Micro 框架并非指该仓库 https://github.com/micro/micro ,该框架是一个云原生开发平台而非微服务框架。

安装

下文将默认安装以下所有组件

框架

我使用的是 go 1.9 版本,最新的 go-micro 框架版本是 4.9.0 ,因此只需要在项目的 go.mod 内的 require 项里添加如下语句即可

1
go-micro.dev/v4 v4.9.0

命令工具

如果需要,还可以额外安装控制台命令。可以在官方文档中查看详细信息。

1
go install github.com/go-micro/cli/cmd/go-micro@latest

安装完成后,在命令行输入 go-micro 验证是否成功安装。

仪表板工具

也可以安装 Go-Micro Web 仪表板,方便后续测试。

1
go install github.com/go-micro/dashboard@latest

直接在命令行输入 dashboard 启动 Go-Micro Web 仪表板。浏览器访问 http://127.0.0.1:8082/ ,输入用户名:admin,密码:micro,即可进入仪表板

仪表板配置见官方文档

新建项目

在指定目录下,控制台输入以下指令将创建名字为 Micro-Learning 的 Go-Micro 服务端项目模板

1
go-micro new service Micro-Learning

此处仅演示 Go-Micro 框架的服务端模板创建。关于客户端,接下来将使用另一个微服务框架 Gin 实现,因此不在此说明

项目结构

控制台输入 tree /f 指令,输出项目模板文件树如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
│   .dockerignore
│ .gitignore
│ Dockerfile
│ go.mod
│ main.go
│ Makefile

├───.idea
│ 配置文件略

├───handler
│ Micro-Learning.go

└───proto
Micro-Learning.proto
  • main.go: 项目的入口文件。
  • handler/: 处理 grpc 实现的接口。对应实现接口的子类,都放置在 handler 中。
  • proto/: 预生成的 protobuf 文件。
  • Dockerfile: 部署微服务使用的 Dockerfile
  • Makefile: 编译文件。最常用于快速编译 protobuf 文件。

Tips: Windows 下如何使用 make 指令?

使用 Win 11/Win 10 自带的 Windows 包管理工具 winget 。输入指令 winget install GnuWin32.Make -l "{Path}" ,运行即可安装,其中 Path 是你想安装 Make 的目录(绝对路径)。安装完成后将 Path 目录下的 bin 目录添加进环境变量,重启控制台即可使用 Make 。

执行以下 make 指令编译环境配置

1
2
make init
make proto

这两个指令将初始化必要环境并编译 protocol buffer 文件

使用 consul 服务发现

Go-Micro 框架默认自带服务发现:mdns,但功能不够强大,需要使用 consul 提供服务发现。在 go.mod 文件中添加以下 Go-Micro 框架的 consul 依赖

1
github.com/go-micro/plugins/v4/registry/consul v1.1.0

在上文创建的 Go-Micro 服务端模板项目中的 main.go 中修改以下部分代码

1
2
3
4
5
6
7
8
9
10
11
12
// consul 服务发现服务器的地址,可以有多个(对应 consul 集群)
// 8500 是 consul 默认接口,生产环境中一般不这样使用
// 单机调试时记得在控制台启动 consul
consulReg := consul.NewRegistry(registry.Addrs("127.0.0.1:8500"))

// Create service
srv := micro.NewService()
srv.Init(
micro.Name(service),
micro.Registry(consulReg), // 将服务注册到 consul
micro.Version(version),
)