← Cobra | Etcd →

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()
}

📖 延伸阅读