不做大哥好多年 不做大哥好多年
首页
  • MySQL
  • Redis
  • Elasticsearch
  • Kafka
  • Etcd
  • MongoDB
  • TiDB
  • RabbitMQ
  • 01.GO基础
  • 02.面向对象
  • 03.并发编程
  • 04.常用库
  • 05.数据库操作
  • 06.Beego框架
  • 07.Beego商城
  • 08.GIN框架
  • 09.GIN论坛
  • 10.微服务
  • 01.Python基础
  • 02.Python模块
  • 03.Django
  • 04.Flask
  • 05.SYL
  • 06.Celery
  • 10.微服务
  • 01.Java基础
  • 02.面向对象
  • 03.Java进阶
  • 04.Web基础
  • 05.Spring框架
  • 100.微服务
  • Docker
  • K8S
  • 容器原理
  • Istio
  • 数据结构
  • 算法基础
  • 算法题分类
  • 前置知识
  • PyTorch
  • 01.Python
  • 02.GO
  • 03.Java
  • 04.业务问题
  • 05.关键技术
  • 06.项目常识
  • 10.计算机基础
  • Linux基础
  • Linux高级
  • Nginx
  • KeepAlive
  • ansible
  • zabbix
  • Shell
  • Linux内核

逍遥子

不做大哥好多年
首页
  • MySQL
  • Redis
  • Elasticsearch
  • Kafka
  • Etcd
  • MongoDB
  • TiDB
  • RabbitMQ
  • 01.GO基础
  • 02.面向对象
  • 03.并发编程
  • 04.常用库
  • 05.数据库操作
  • 06.Beego框架
  • 07.Beego商城
  • 08.GIN框架
  • 09.GIN论坛
  • 10.微服务
  • 01.Python基础
  • 02.Python模块
  • 03.Django
  • 04.Flask
  • 05.SYL
  • 06.Celery
  • 10.微服务
  • 01.Java基础
  • 02.面向对象
  • 03.Java进阶
  • 04.Web基础
  • 05.Spring框架
  • 100.微服务
  • Docker
  • K8S
  • 容器原理
  • Istio
  • 数据结构
  • 算法基础
  • 算法题分类
  • 前置知识
  • PyTorch
  • 01.Python
  • 02.GO
  • 03.Java
  • 04.业务问题
  • 05.关键技术
  • 06.项目常识
  • 10.计算机基础
  • Linux基础
  • Linux高级
  • Nginx
  • KeepAlive
  • ansible
  • zabbix
  • Shell
  • Linux内核
  • GO基础

  • 面向对象

  • 并发编程

  • 常用库

  • 数据库操作

  • Beego框架

  • Beego商城

  • GIN框架

  • GIN论坛

  • 微服务

    • 01.RPC
    • 02.protobuf
    • 03.gRPC
    • 04.micro简介
    • 05.consul
    • 06.go-micro
      • 01.go-micro基础
        • 1.1 概述
        • 1.2 go-micro 安装
        • 1.3 go-micro命令
        • 1.4 micro new参数
      • 02.go-micro初始化项目
        • 2.1 创建项目
        • 2.2 protobuf生成文件
        • 2.3 main.go
        • 2.4 handler/bj38.go
      • 03.创建微服务服务端
        • 3.1创建服务端
      • 04.创建客户端
        • 4.1 创建客户端
    • 07.nacos安装
    • 08.grpc注册nacos
    • 09.gin_grpc_nacos
    • 10.限流
  • 设计模式

  • Go
  • 微服务
xiaonaiqiang
2021-11-08
目录

06.go-micro

# 01.go-micro基础

  • 参考网站 (opens new window)

# 1.1 概述

  • micro是一个工具集,用来帮助开发者创建和管理微服务。
  • 它包括两部分:
    • go-micro:它是一个go语言的微服务开发框架。
    • micro:它是一个命令行工具,这个工具是基于go-micro开发的。
  • 另外go-plugins作为一组插件,在开发过程中也是必要的。
  • 通过插件,我们在服务发现、异步消息和传输协议等方面有了更多的选择。

# 1.2 go-micro 安装

  • 配置go代理
root@dev:~#  vim ~/.bashrc 
export GOROOT=/usr/local/go #GOROOT是系统上安装Go软件包的位置。
export GOPATH=/home/GOPATH #GOPATH是工作目录的位置。
export PATH=$GOPATH/bin:$GOROOT/bin:$PATH
export GO111MODULE=on
export GOPROXY="https://goproxy.cn"
root@dev:~#  source ~/.bashrc 
1
2
3
4
5
6
7
  • 安装 go-micro
# 安装go-micro
root@dev:~#  go get github.com/micro/go-micro
# 如果您使用代码生成,您还需要使用 protoc-gen-go
root@dev:~#  go get github.com/micro/protobuf/{proto,protoc-gen-go}
# Micro 工具包提供了访问微服务的各种方法
root@dev:~#  go get github.com/micro/micro/v2
1
2
3
4
5
6

# 1.3 go-micro命令

# 使用命令创建一个微服务项目:bj38
root@dev:micro_dir# micro new bj38 --type=srv --alias=bj38 --namespace=io.github.entere --gopath=false
.
├── micro.mu
├── main.go          # 项目入口文件
├── generate.go
├── handler          # 处理 gRPC 实现的接口
│   └── bj38.go
├── proto            # 预生成的 protobuf 文件
│   └── bj38.proto
├── Dockerfile         # 部署微服务所使用的 Dockerfile
├── Makefile          # 快速编译文件
├── README.md
├── .gitignore
└── go.mod
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  • --namespace: 命名空间 == 包名
  • --type : 微服务类型。
    • srv: 微服务类型项目
    • web:基于微服务的 web 网站

# 1.4 micro new参数

配置指令 作用 默认值 说明
–namespace 服务命令空间 go.micro 可以根据自己的域名定义合适的空间前缀
–type 服务类型 srv 目前支持4种服务类型,分别是api、fnc(function)、srv(service)、web。
–alias 指定别名 声明则必填 使用单词,不要带任何标点符号,名称对Micro路由机制影响很大
–plugin 使用哪些插件 声明则必填 需要自选插件时使用
–gopath 是否使用GOPATH作为代码路径 true或者false 使用go modules 可以设置为false
–fqdn 服务定义域,API需要通过该域找到服务 默认是使用服务的命令空间加上类型再加上别名 服务定义域

# 02.go-micro初始化项目

# 2.1 创建项目

# 使用命令创建一个微服务项目:bj38
root@dev:micro_dir# micro new bj38 --type=srv --alias=bj38 --namespace=io.github.entere --gopath=false
.
├── micro.mu
├── main.go          # 项目入口文件
├── generate.go
├── handler          # 处理 gRPC 实现的接口
│   └── bj38.go
├── proto            # 预生成的 protobuf 文件
│   └── bj38.proto
├── Dockerfile         # 部署微服务所使用的 Dockerfile
├── Makefile          # 快速编译文件
├── README.md
├── .gitignore
└── go.mod
root@dev:bj38#  make
root@dev:bj38#  make proto
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 2.2 protobuf生成文件

  • proto/bj38.pb.micro.go
type Bj38Service interface {
	Call(ctx context.Context, in *Request, opts ...client.CallOption) (*Response, error)
	Stream(ctx context.Context, in *StreamingRequest, opts ...client.CallOption) (Bj38_StreamService, error)
	PingPong(ctx context.Context, opts ...client.CallOption) (Bj38_PingPongService, error)
}

// 1、客户端的定义
type bj38Service struct {
	c    client.Client
	name string
}

// 2、客户端new初始化
func NewBj38Service(name string, c client.Client) Bj38Service {
	return &bj38Service{
		c:    c,
		name: name,
	}
}

// 3、客户端的实现
func (c *bj38Service) Call(ctx context.Context, in *Request, opts ...client.CallOption) (*Response, error) {
	req := c.c.NewRequest(c.name, "Bj38.Call", in)
	out := new(Response)
	err := c.c.Call(ctx, req, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

// 服务注册(服务端使用)---> 对应 gRPC的 RegisterXXXService() 方法
func RegisterBj38Handler(s server.Server, hdlr Bj38Handler, opts ...server.HandlerOption) error {
	type bj38 interface {
		Call(ctx context.Context, in *Request, out *Response) error
		Stream(ctx context.Context, stream server.Stream) error
		PingPong(ctx context.Context, stream server.Stream) error
	}
	type Bj38 struct {
		bj38
	}
	h := &bj38Handler{hdlr}
	return s.Handle(s.NewHandler(&Bj38{h}, opts...))
}
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

# 2.3 main.go

package main

import (
	"bj38/handler"
	pb "bj38/proto"

	"github.com/micro/micro/v3/service"
	"github.com/micro/micro/v3/service/logger"
)

func main() {
	// Create service
	srv := service.New(
		service.Name("bj38"),
		service.Version("latest"),
	)

	// Register handler
	pb.RegisterBj38Handler(srv.Server(), new(handler.Bj38))

	// Run service
	if err := srv.Run(); err != nil {
		logger.Fatal(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

# 2.4 handler/bj38.go

package handler

type Bj38 struct{}

// Call is a single request handler called via client.Call or the generated client code
func (e *Bj38) Call(ctx context.Context, req *bj38.Request, rsp *bj38.Response) error {
	log.Info("Received Bj38.Call request")
	rsp.Msg = "Hello " + req.Name
	return nil
}
1
2
3
4
5
6
7
8
9
10

# 03.创建微服务服务端

# 3.1创建服务端

# 使用命令创建一个微服务项目:bj38
root@dev:micro_dir# micro new test66 --type=srv --alias=test66 --namespace=example.com --gopath=false
Creating service test666
.
├── micro.mu
├── main.go
├── generate.go
├── handler
│   └── test666.go
├── proto
│   └── test666.proto
├── Dockerfile
├── Makefile
├── README.md
├── .gitignore
└── go.mod
root@dev:test666# make proto
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 04.创建客户端

# 4.1 创建客户端

root@dev:micro_dir# micro new test77 --type=web --alias=test77 --namespace=example.com --gopath=false
.
├── micro.mu
├── main.go
├── generate.go
├── handler
│   └── test77.go
├── proto
│   └── test77.proto
├── Dockerfile
├── Makefile
├── README.md
├── .gitignore
└── go.mod
1
2
3
4
5
6
7
8
9
10
11
12
13
14
上次更新: 2024/3/13 15:35:10
05.consul
07.nacos安装

← 05.consul 07.nacos安装→

最近更新
01
04.数组双指针排序_子数组
03-25
02
08.动态规划
03-25
03
06.回溯算法
03-25
更多文章>
Theme by Vdoing | Copyright © 2019-2025 逍遥子 技术博客 京ICP备2021005373号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式