Go Micro 创建 RPC
Go Micro 是一个插件化的 RPC 开发框架,用于使用 Go 语言快速构建微服务。
1. 创建 RPC 服务
使用 Go Micro 的 micro 工具创建 RPC 服务,例如创建 hello 服务。
micro new hello
micro 生成了 hello 项目,目录结构如下:
. ├── main.go ├── generate.go ├── plugin.go ├── handler │ └── hello.go ├── subscriber │ └── hello.go ├── proto/hello │ └── hello.proto ├── Dockerfile ├── Makefile └── README.md
生成文件说明:
- main.go: 主程序文件。
- handler: 服务处理目录,里面包含所有的 RPC 服务的业务逻辑。
- proto: proto 文件定义。里面包含使用 proto 语言定义的 RPC 服务描述。
- Makefile: make 编译、创建、测试、打包等脚本。
- Dockerfile: 将编译好的 RPC 服务打包为 Docker 的脚本。
2. 使用 Go Mod 管理依赖
设置新创建的 hello 项目使用 Go Mod 管理依赖包。
# 进入项目目录 $ cd hello #运行 go mod 初始化命令 $ go mod init hello
3. 修改 proto 文件
进入项目的 proto 目录,里面有一个自动生成的 hello.proto 文件,编辑文件在 package 下增加 go package 路径:
syntax = "proto3"; package go.micro.srv.hello; option go_package="proto/hello"; service Hello { ......
4. 编译 proto 文件
通过 make 编译 proto 文件:
make proto
编译后会在 proto/hello 目录中生成两个文件:hello.pb.go 和 hello.pb.micro.go。
5. main.go 说明
以下为 Go Micro 自动创建的 main.go 文件。
package main import ( "github.com/micro/go-micro/util/log" "github.com/micro/go-micro" "hello/handler" "hello/subscriber" hello "hello/proto/hello" ) func main() { // New Service // 创建一个新的服务,服务名为 go.micro.srv.hello service := micro.NewService( micro.Name("go.micro.srv.hello"), micro.Version("latest"), ) // Initialise service // 通过命令行参数或者插件初始化服务 service.Init() // Register Handler // 注册业务处理组件 handler.Hello hello.RegisterHelloHandler(service.Server(), new(handler.Hello)) // Register Struct as Subscriber // 暂且忽略,可直接去掉 //micro.RegisterSubscriber("go.micro.srv.hello", service.Server(), new(subscriber.Hello)) // Register Function as Subscriber // 暂且忽略,可直接去掉 micro.RegisterSubscriber("go.micro.srv.hello", service.Server(), subscriber.Handler) // Run service // 运行服务 if err := service.Run(); err != nil { log.Fatal(err) } }
6. 编译运行 hello 服务
通过 make 编译项目:
make build
编译后会在 hello 目录中生成可执行文件:hello-srv。
运行 hello-srv。
./hello-srv
hello 服务开始运行,并监听端口,提供服务:
2022-01-13 03:12:28.936707 I | Transport [http] Listening on [::]:38279 2022-01-13 03:12:28.938917 I | Broker [http] Connected to [::]:35811 2022-01-13 03:12:28.945683 I | Registry [mdns] Registering node: go.micro.srv.hello-92b16f46-66bd-4b51-91c5-5da327b756f6 2022-01-13 03:12:28.977517 I | Subscribing go.micro.srv.hello-92b16f46-66bd-4b51-91c5-5da327b756f6 to topic: go.micro.srv.hello
Go Micro 是一个插件化的 RPC 开发框架,用于使用 Go 语言快速构建微服务。测试 Go Micro 服务可以使用 micro 工具,比如调用 hello RPC 服务:$ micro call g ...