Leong's blog Leong's blog
首页
  • 编程
  • 资源
  • Golang
  • 微服务
  • vue
  • 操作系统
  • 数据结构与算法
  • Linux
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Leong Y

跑起来吧
首页
  • 编程
  • 资源
  • Golang
  • 微服务
  • vue
  • 操作系统
  • 数据结构与算法
  • Linux
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • docker简明教程
  • go-micro简明教程
    • Go-Micro与Micro
    • Go-Micro概念
    • Go-Micro快速开始
      • 1、依赖安装
      • 2、proto编写&代码生成
      • 3、Server端编写
      • 4、Client端编写
    • Go-Micro CLI
      • 1、安装
      • 2、命令
  • grpc简明案例
  • Protocol Buffers学习
  • K8S
  • 容器部署
  • 微服务
leong
2024-07-03
目录

go-micro简明教程

# Go-Micro与Micro

Go-Micro

go-micro 是一个用于构建微服务的开源框架。它旨在简化微服务开发的复杂性,提供了一系列工具和库,帮助开发者快速创建、管理和扩展微服务架构

Micro

Micro3.0之前Micro 是一个用于构建微服务的工具集,提供了完整的解决方案,包括 API 网关、服务发现、配置管理等

Micro 3.0之后 ,微服务框架成为了云原生开发平台

Go-Micro与Micro的分离

Micro变成云原生开发平台后,Go-Micro就被舍弃并转交到Micro的CEO个人名下,后续Go-Micro这个框架的维护权也交给了社区,仍蓬勃发展。目前最新版本是v5,已经有21.5k star

go-micro仓库 (opens new window)

关于Go-Micro与Micro的一些说明 (opens new window)

# Go-Micro概念

介绍

  • 它是对分布式系统的高度抽象
  • 提供分布式系统开发的核心库
  • 可拔插的架构,按需使用

组件

  • Registry(注册):提供服务发现机制
  • Selector(选择器):能够实现负载均衡
  • Transport(传输):服务与服务之间通信接口
  • Broker:提供异步通信的消息发布/订阅接口
  • Codec(编码):消息传输到两端时进行编码与解码
  • Server(服务端)
  • Client(客户端)

架构组件图

架构组件图

通信图

通信图

# Go-Micro快速开始

用go-micro v4 编写一个斐波那契数列运算的服务,快速熟悉go-micro框架的基础使用

# 1、依赖安装

proto generator

go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install github.com/go-micro/generator/cmd/protoc-gen-micro@latest
1
2

PS:如果不知道ProtocolBuffer是什么可以看[[Protocol Buffers学习]]

go-micro v4 安装

go get go-micro.dev/v4
1

# 2、proto编写&代码生成

fibonacci.proto

syntax = "proto3";

package fibonacci;

// 指定生成go文件的存放位置及其包名
option go_package = "./fibonacci";


service Fibonacci {
  rpc GetSequence(FibonacciRequest) returns (FibonacciResponse) {}
}

message FibonacciRequest {
  int32 length = 1;
}

message FibonacciResponse {
  repeated int64 sequence = 1;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
.
├── client
├── proto
│   └── fibonacci.proto
└── server
1
2
3
4
5

代码生成

进入proto文件夹内执行

protoc --micro_out=. --go_out=. ./*.proto
1

执行完命令后我们可以看到新增了两个文件

.
├── client
├── proto
│   ├── fibonacci
│   │   ├── fibonacci.pb.go
│   │   └── fibonacci.pb.micro.go
│   └── fibonacci.proto
└── server
1
2
3
4
5
6
7
8

# 3、Server端编写

package main

import (
	"context"
	"fmt"
	pb "xxx/proto/fibonacci"

	"go-micro.dev/v4"
)

type Server struct {
}

func (s *Server) GetSequence(ctx context.Context, req *pb.FibonacciRequest, res *pb.FibonacciResponse) error {
	length := req.GetLength()
	sequence := make([]int64, length)
	if length > 0 {
		sequence[0] = 0
	}
	if length > 1 {
		sequence[1] = 1
	}
	for i := int32(2); i < length; i++ {
		sequence[i] = sequence[i-1] + sequence[i-2]
	}

	res.Sequence = sequence
	return nil
}

func main() {
	// 创建新的服务
	service := micro.NewService(
		micro.Name("fibonacci.server"),
	)

	// 初始化方法
	service.Init()

	// 注册服务
	pb.RegisterFibonacciHandler(service.Server(), &Server{})

	// 运行服务
	if err := service.Run(); err != nil {
		fmt.Println(err)
	}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
.
├── client
├── go.mod
├── go.sum
├── proto
│   ├── fibonacci
│   │   ├── fibonacci.pb.go
│   │   └── fibonacci.pb.micro.go
│   └── fibonacci.proto
└── server
    └── server.go
1
2
3
4
5
6
7
8
9
10
11

# 4、Client端编写

package main

import (
	"context"
	"fmt"
	pb "xxx/proto/fibonacci"

	"go-micro.dev/v4"
)

func main() {
	// 创建新的服务
	service := micro.NewService(
		micro.Name("fibonacci.client"),
	)

	// 初始化
	service.Init()

	c := pb.NewFibonacciService("fibonacci.server", service.Client())

	req := &pb.FibonacciRequest{Length: 10}

	res, err := c.GetSequence(context.Background(), req)
	if err != nil {
		fmt.Println(err)
		return
	}

	fmt.Printf("Fibonacci sequence: %v\n", res.GetSequence())

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
.
├── client
│   └── client.go
├── go.mod
├── go.sum
├── proto
│   ├── fibonacci
│   │   ├── fibonacci.pb.go
│   │   └── fibonacci.pb.micro.go
│   └── fibonacci.proto
└── server
    └── server.go
1
2
3
4
5
6
7
8
9
10
11
12

# Go-Micro CLI

Micro割离go-micro后,go-micro的社区贡献者也做出了类似以前Micro工具集的CLI,go-micro cli (opens new window)

# 1、安装

go install github.com/go-micro/cli/cmd/go-micro@latest
1

# 2、命令

使用go-micro --help可以查看所有命令,接下来是对一些命令的解释和示例

  1. call:该命令用于调用一个服务。
    • 示例:go-micro call helloworld Helloworld.Call '{"name": "John"}'
    • 这个示例调用了名为 helloworld 的服务中的 Helloworld.Call 方法,传递了一个 JSON 格式的参数 {"name": "John"}。
  2. completion: 该命令用于输出指定 shell(bash 或 zsh)的 shell 自动补全代码
    • 示例:go-micro completion bash
    • 这个示例输出适用于 bash shell 的自动补全代码。
  3. describe:该命令用于描述一个资源。
    • 示例:go-micro describe helloworld
    • 这个示例描述了名为 helloworld 的资源。
  4. generate:该命令用于在事后生成项目模板文件。
    • 示例:go-micro generate
    • 这个示例在当前目录下生成项目模板文件。
上次更新: 2024/07/08, 18:19:51
docker简明教程
grpc简明案例

← docker简明教程 grpc简明案例→

最近更新
01
vue3快速上手
07-31
02
程序从加载到运行的过程
07-08
03
进程、线程、协程
07-08
更多文章>
Theme by Vdoing | Copyright © 2023-2024 Leong Y | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式