一. 环境准备。
- 安装依赖包
这里我用的是gomod
。 - 安装
protocol buffers
。
下载地址: https://github.com/protocolbuffers/protobuf/releases
下载解压后放入PATH路径下
二. 实现服务端。
- 新建
account.proto
文件。
syntax = "proto3";
service Greeter {
rpc Hello(HelloRequest) returns (HelloResponse) {}
}
message HelloRequest {
string name = 1;
}
message HelloResponse {
string greeting = 2;
}
- 使用
protoc
生成相应的代码
protoc --go_out=. --micro_out=. proto/greeter.proto
- 服务端代码
package main
import (
"context"
"fmt"
proto "goMicroApp/hello-world/proto"
"github.com/micro/go-micro"
)
type Greeter struct{}
func (g *Greeter) Hello(ctx context.Context, req *proto.HelloRequest, rsp *proto.HelloResponse) error {
rsp.Greeting = "你好," + req.Name
return nil
}
func main() {
// 创建服务,除了服务名,其它选项可加可不加,比如Version版本号、Metadata元数据等
service := micro.NewService(
micro.Name("greeter.service"),
micro.Version("latest"),
)
service.Init()
// 注册服务
proto.RegisterGreeterHandler(service.Server(), new(Greeter))
// 启动服务
if err := service.Run(); err != nil {
fmt.Println(err)
}
}
三. 实现客户端。
- 客户端代码
package main
import (
"context"
"fmt"
proto "goMicroApp/hello-world/proto"
"github.com/micro/go-micro"
)
func main() {
// 定义服务,可以传入其它可选参数
service := micro.NewService(micro.Name("greeter.client"))
service.Init()
// 创建客户端
greeter := proto.NewGreeterService("greeter.service", service.Client())
// 调用greeter服务
rsp, err := greeter.Hello(context.TODO(), &proto.HelloRequest{Name: "World"})
if err != nil {
fmt.Println(err)
return
}
// 打印响应结果
fmt.Println(rsp.Greeting)
}
四. 运行。
- 运行服务端。
go run server.go
- 运行客户端得到结果。
PS C:\Users\admin\go\src\goMicroApp\hello-world\service> go run client.go
你好,World
MicroWeb可视化页面
- 安装
go get github.com/micro/micro
- 运行
PS C:\Users\admin\go> micro web
- 访问
http://localhost:8082/
接口信息:
测试请求:
总结
这是我在B站看到的go-micro微服务框架教程,刚看到第一章,好多的概念我还是没整明白(如consul,etcd服务发现等),看着迷迷糊糊的,上面的代码是我照葫芦画瓢做的,做一个学习记录吧,防止我以后忘记了。
学习教程: https://space.bilibili.com/478093818?spm_id_from=333.788.b_765f7570696e666f.1