Go-Micro - Go 微服务框架
Go-Micro 是一个分布式系统开发框架,提供了服务发现、负载均衡、健康检查等微服务核心功能。掌握 Go-Micro 是构建微服务架构的基础。
创建服务
📝 基础服务
package main
import (
"context"
"fmt"
"github.com/micro/go-micro/v2"
)
// 定义服务接口
type Greeter interface {
Hello(ctx context.Context, req *Request, rsp *Response) error
}
type Request struct {
Name string
}
type Response struct {
Message string
}
// 服务实现
type GreeterHandler struct{}
func (g *GreeterHandler) Hello(ctx context.Context, req *Request, rsp *Response) error {
rsp.Message = "Hello " + req.Name
return nil
}
func main() {
// 创建服务
service := micro.NewService(
micro.Name("go.service.greeter"),
micro.Version("latest"),
)
// 初始化
service.Init()
// 注册 Handler
micro.RegisterHandler(service.Server(), &GreeterHandler{})
// 运行服务
if err := service.Run(); err != nil {
fmt.Println(err)
}
}
服务调用
📝 客户端调用
package main
import (
"context"
"fmt"
"github.com/micro/go-micro/v2/client"
pb "path/to/proto"
)
func main() {
// 创建客户端
c := client.NewClient()
// 创建请求
req := &pb.Request{Name: "Alice"}
rsp := &pb.Response{}
// 调用服务
if err := c.Call(
context.Background(),
client.NewRequest("go.service.greeter", "Greeter.Hello", req),
rsp,
); err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println(rsp.Message)
}
服务注册与发现
📝 使用 Consul
import (
"github.com/micro/go-micro/v2"
"github.com/micro/go-micro/v2/registry"
"github.com/micro/go-plugins/registry/consul/v2"
)
func main() {
// 创建 Consul 注册中心
r := consul.NewRegistry(
registry.Addrs("localhost:8500"),
)
// 创建服务
service := micro.NewService(
micro.Name("go.service.greeter"),
micro.Registry(r),
)
service.Init()
service.Run()
}