Go-Micro 微服务框架快速入门指南
2025-07-05 06:20:18作者:翟萌耘Ralph
前言
Go-Micro 是一个功能强大的 Go 语言微服务框架,它提供了构建分布式系统所需的核心组件。本文将带你快速上手 Go-Micro,从创建第一个微服务到实现服务间通信。
环境准备
首先需要安装 Go-Micro 框架:
go get "go-micro.dev/v5"
创建第一个微服务
1. 初始化项目
mkdir helloworld
cd helloworld
go mod init
go get go-micro.dev/v5@latest
2. 编写服务代码
创建 main.go
文件,内容如下:
package main
import (
"context"
"go-micro.dev/v5"
)
// 定义请求和响应结构体
type Request struct {
Name string `json:"name"`
}
type Response struct {
Message string `json:"message"`
}
// 定义服务处理器
type Say struct{}
// Hello 方法处理请求
func (h *Say) Hello(ctx context.Context, req *Request, rsp *Response) error {
rsp.Message = "Hello " + req.Name
return nil
}
func main() {
// 创建服务实例
service := micro.New("helloworld")
// 初始化服务
service.Init()
// 注册处理器
service.Handle(new(Say))
// 运行服务
service.Run()
}
3. 运行服务
go run main.go
服务启动后会输出监听的地址,例如:
Transport [http] Listening on [::]:35823
4. 测试服务
使用 curl 测试服务:
curl -XPOST \
-H 'Content-Type: application/json' \
-H 'Micro-Endpoint: Say.Hello' \
-d '{"name": "alice"}' \
http://localhost:35823
配置固定端口
默认情况下,Go-Micro 会随机分配端口。可以通过以下方式指定固定端口:
1. 代码方式
service := micro.NewService(
micro.Name("helloworld"),
micro.Address(":8080"),
)
2. 环境变量方式
MICRO_SERVER_ADDRESS=:8080 go run main.go
使用 Protocol Buffers
Go-Micro 支持使用 Protocol Buffers 定义服务接口。
1. 定义 proto 文件
创建 proto/helloworld.proto
:
syntax = "proto3";
package greeter;
option go_package = "/proto;helloworld";
service Say {
rpc Hello(Request) returns (Response) {}
}
message Request {
string name = 1;
}
message Response {
string message = 1;
}
2. 生成代码
protoc --proto_path=. --micro_out=. --go_out=. helloworld.proto
3. 更新服务代码
package main
import (
"go-micro.dev/v5"
pb "github.com/micro/helloworld/proto"
)
type Say struct{}
func (h *Say) Hello(ctx context.Context, req *pb.Request, rsp *pb.Response) error {
rsp.Message = "Hello " + req.Name
return nil
}
func main() {
service := micro.New("helloworld")
service.Init()
pb.RegisterSayHandler(service.Server(), &Say{})
service.Run()
}
客户端调用服务
1. 创建客户端
package main
import (
"context"
"fmt"
"go-micro.dev/v5"
pb "github.com/micro/helloworld/proto"
)
func main() {
service := micro.New("helloworld")
service.Init()
say := pb.NewSayService("helloworld", service.Client())
rsp, err := say.Hello(context.TODO(), &pb.Request{
Name: "John",
})
if err != nil {
fmt.Println(err)
return
}
fmt.Println(rsp.Message)
}
总结
通过本文,你已经学会了:
- 如何创建基本的 Go-Micro 服务
- 如何定义和注册服务处理器
- 如何配置服务端口
- 如何使用 Protocol Buffers 定义服务接口
- 如何创建客户端调用服务
Go-Micro 提供了更多高级功能,如服务发现、负载均衡、消息代理等,这些都是构建健壮微服务架构的重要组件。建议在掌握基础后,继续探索这些高级特性。