不做大哥好多年 不做大哥好多年
首页
  • 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
      • 01.consul安装
        • 1.1 consul 安装说明
        • 1.2 consul 常用命令
        • 1.3 测试上述 命令
        • 1.4 注册服务到 consul 并查看
      • 02.consul使用
        • 2.0 启动consul
        • 2.1 pb/person.proto
        • 2.2 consul_server.go
        • 2.3 consul_client.go
        • 2.4 consul_deregister.go
        • 2.5 页面查看注册结果
    • 06.go-micro
    • 07.nacos安装
    • 08.grpc注册nacos
    • 09.gin_grpc_nacos
    • 10.限流
  • 设计模式

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

05.consul

# 01.consul安装

# 1.1 consul 安装说明

  • 下载 consul: https://releases.hashicorp.com/consul/ 从中选择版本下载,得到 zip 压缩包
root@dev:opt#  cd /opt
root@dev:opt#  wget https://releases.hashicorp.com/consul/1.5.2/consul_1.5.2_linux_amd64.zip
root@dev:opt#  unzip consul_1.5.2_linux_amd64.zip
root@dev:opt#  mv consul /usr/local/bin/
root@dev:opt#  consul -h
1
2
3
4
5

# 1.2 consul 常用命令

root@dev:opt#  consul agent dev      # 开发dev模式启动consul
1
  • consul agent

    • -bind=0.0.0.0 指定 consul所在机器的 IP地址。 默认值:0.0.0.0

    • -http-port=8500 consul 自带一个web访问的默认端口:8500

    • -client=127.0.0.1 表明哪些机器可以访问consul 。 默认本机。0.0.0.0 所有机器均可访问。

    • -config-dir=foo 所有主动注册服务的 描述信息

    • -data-dir=path 储存所有注册过来的srv机器的详细信息。

    • -dev 开发者模式,直接以默认配置启动 consul

    • -node=hostname 服务发现的名字。

    • -rejoin consul 启动的时候,加入到的 consul集群

    • -server 以服务方式开启consul, 允许其他的consul 连接到开启的 consul上 (形成集群)。如果不加 -server, 表示以 “客户端” 的方式开启。不能被连接。

    • -ui 可以使用 web 页面 来查看服务发现的详情

# 1.3 测试上述 命令

# 在终端中,键入
root@dev:~#  mkdir /etc/consul.d/
root@dev:opt#  consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul -node=n1 -bind=192.168.56.100 -ui -rejoin -config-dir=/etc/consul.d/ -client 0.0.0.0
1
2
3
  • 启动 Google 浏览器, 测试:http://192.168.56.100:8500/ui/dc1/services

  • 其他常用命令
root@dev:demo#  consul members         # 查看集群有哪些成员
root@dev:demo#  consul info           # 查看当前 consul 的 IP 信息
root@dev:demo#  consul leave          # 优雅的关闭 consul 。—— 不优雅!Ctrl -c 
1
2
3

# 1.4 注册服务到 consul 并查看

  • 服务注册web.json文件
root@dev:demo#  vim /etc/consul.d/web.json
{
  "service": {
    "name": "bj38",
    "tags": ["it","test"],
    "port": 8800,
    "check": {
      "id": "api",
      "name": "xnq test",
      "http": "http://192.168.56.100:8800",
      "interval": "5s",
      "timeout": "1s"
    }
  }
}
root@dev:consul.d# consul reload       # 关闭consul 再重启
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  • 查看是否注册成功
root@dev:consul.d# curl -s http://127.0.0.1:8500/v1/catalog/service/bj38     # 使用命令查看是否注册成功
1

# 02.consul使用

# 2.0 启动consul

root@dev:consul.d#  consul agent -dev
1

# 2.1 pb/person.proto

  •    root@dev:pb#  protoc --go_out=plugins=grpc:./ *.proto
    
    1
syntax = "proto3";
option go_package = "./person";
package pb;

message Person {
  string name = 1;
  int32 age = 2;
}

// 添加 rpc服务
service hello {
  rpc sayHello (Person) returns (Person);
}
1
2
3
4
5
6
7
8
9
10
11
12
13

# 2.2 consul_server.go

package main

import (
	"context"
	"demo/pb/person"
	"fmt"
	"github.com/hashicorp/consul/api"
	"google.golang.org/grpc"
	"net"
)

// 定义类
type Children struct {

}

// 绑定类方法, 实现借口
func (this *Children)SayHello(ctx context.Context, p *person.Person) (*person.Person, error) {
	p.Name = "hello  " + p.Name
	return p, nil
}

func main()  {
	// 把grpc服务,注册到consul上.
	// 1. 初始化consul 配置
	consulConfig := api.DefaultConfig()

	// 2. 创建 consul 对象
	consulClient, err := api.NewClient(consulConfig)
	if err != nil {
		fmt.Println("api.NewClient err:", err)
		return
	}
	// 3. 告诉consul, 即将注册的服务的配置信息
	reg := api.AgentServiceRegistration {
		ID:"bj38",
		Tags:[]string{"grcp", "consul"},
		Name:"grpc And Consul",
		Address:"127.0.0.1",
		Port:8800,
		Check:&api.AgentServiceCheck{
			CheckID:"consul grpc test",
			TCP:"127.0.0.1:8800",
			Timeout:"1s",
			Interval:"5s",
		},
	}

	// 4. 注册 grpc 服务到 consul 上
	consulClient.Agent().ServiceRegister(&reg)

	//////////////////////以下为 grpc 服务远程调用//////////////////////////////

	// 1.初始化 grpc 对象,
	grpcServer := grpc.NewServer()

	// 2.注册服务
	person.RegisterHelloServer(grpcServer, new(Children))

	// 3.设置监听, 指定 IP/port
	listener, err := net.Listen("tcp", "127.0.0.1:8800")
	if err != nil {
		fmt.Println("Listen err:", err)
		return
	}
	defer listener.Close()

	fmt.Println("服务启动... ")

	// 4. 启动服务
	grpcServer.Serve(listener)

}
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73

# 2.3 consul_client.go

package main

import (
	"context"
	"demo/pb/person"
	"fmt"
	"github.com/hashicorp/consul/api"
	"google.golang.org/grpc"
	"strconv"
)

func main()  {
	// 初始化 consul 配置
	consulConfig := api.DefaultConfig()

	// 创建consul对象 -- (可以重新指定 consul 属性: IP/Port , 也可以使用默认)
	consulClient, err := api.NewClient(consulConfig)

	// 服务发现. 从consuL上, 获取健康的服务
	services, _, err := consulClient.Health().Service("grpc And Consul", "grcp", true, nil)

	// 简单的负载均衡.

	addr := services[0].Service.Address + ":" + strconv.Itoa(services[0].Service.Port)

	//////////////////////以下为 grpc 服务远程调用//////////////////////////////
	// 1. 链接服务
	//grpcConn, _ := grpc.Dial("127.0.0.1:8800", grpc.WithInsecure())

	// 使用 服务发现consul 上的 IP/port 来与服务建立链接
	grpcConn, _ := grpc.Dial(addr, grpc.WithInsecure())

	// 2. 初始化 grpc 客户端
	grpcClient := person.NewHelloClient(grpcConn)

	var person person.Person
	person.Name = "Andy"
	person.Age = 18

	// 3. 调用远程函数
	p, err := grpcClient.SayHello(context.TODO(), &person)

	fmt.Println(p, 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

# 2.4 consul_deregister.go

package main

import "github.com/hashicorp/consul/api"

func main()  {
	// 1. 初始化 consul 配置
	consuConfig := api.DefaultConfig()

	// 2. 创建 consul 对象
	consulClient, _ := api.NewClient(consuConfig)

	// 3. 注销服务
	consulClient.Agent().ServiceDeregister("bj38")
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 2.5 页面查看注册结果

  • 查看注册成功

上次更新: 2024/3/13 15:35:10
04.micro简介
06.go-micro

← 04.micro简介 06.go-micro→

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