首页
/ Go-Micro 微服务框架快速入门指南

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

总结

通过本文,你已经学会了:

  1. 如何创建基本的 Go-Micro 服务
  2. 如何定义和注册服务处理器
  3. 如何配置服务端口
  4. 如何使用 Protocol Buffers 定义服务接口
  5. 如何创建客户端调用服务

Go-Micro 提供了更多高级功能,如服务发现、负载均衡、消息代理等,这些都是构建健壮微服务架构的重要组件。建议在掌握基础后,继续探索这些高级特性。