一 Consul介绍

Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置。 Consul是分布式的、高可用的、可横向扩展的。

1. 注册中心Consul基本介绍

  • Consul是一种服务网格解决方案

  • 提供具有服务发现,配置和分段功能的全功能控制平面

  • Consul 附带-个简单的内置代理,可以开箱即用

2.注册中心Consul关键功能

  • 服务发现:

    • 客户端可以注册服务,程序可以轻松找到它们所依赖的服务
  • 运行状况检查:

    • Consul客户端可以提供任意数量的运行状况检查
  • KV 存储:

    • 应用程序可以将Consul的层级键/值存储用于任何目的,包括动态配置,功能标记,协调,领导者选举等
  • 安全服务通信:

    • Consul 可以为服务生成和分发TLS证书,建立相互的TLS连接
  • 多数据中心:

    • Consul 支持多个数据中心

3.注册中心Consul两个重要协议

  • Gossip Protocol (八卦协议)

  • Raft Protocol ( 选举协议)

对于想要学习Consul原理的,可以自行百度详细了解这两个协议。

二 Consul安装

1.使用docker拉取镜像

  • 打开终端,输入以下命令:
docekr pull consul

等待一段时间后拉取成功

  • 启动命令:
docker run -d -p 8500:8500 consul

consul会被运行在本机的8500端口上

  • 检查是否运行
docker ps
  • 可视化界面

打开浏览器,输入http://127.0.0.1:8500

三 Config配置

  • 在config目录下新建一个config.yaml

可以把配置相关信息先放在config.yaml里,之后放在consul中。

  • 编写代码:
name: "Account"
title: "账号功能"
mode: "dev"
port: 9580
version: "v0.0.1" log:
level: "debug"
filename: "Account.log"
max_size: 200
max_age: 30
max_backips: 7 mysql:
host: "127.0.0.1"
port: 3306
user: "root"
password: "xxx"
dbname: "micro"
max_open_conns: 200
max_idle_conns: "50" redis:
host: "127.0.0.1"
port: 6379
password: "xxx"
db: 4
pool_size: 100 email:
user: "xxx@qq.com"
pass: "xxx"
host: "smtp.qq.com"
port: 465
rename: "Account" # 配置、注册中心
consul:
host: "localhost"
port: 8500
prefix: "/micro/config"
consulRegistry: "127.0.0.1:8500" # 链路追踪
jaeger:
serviceName: "go.micro.service.account"
addr: "localhost:6831" # 监控服务
prometheus:
host: "0.0.0.0"
port: 9089 # 限流
ratelimit:
QPS: 1000 # 微服务
micro:
name: "go.micro.service.account"
version: "latest"
address: ":9580"
  • 注意,以下字段自行修改:

    • mysql.password
    • redis.password
    • email.user
    • email.pass

四 Consul代码编写

  • 在micro目录下新建一个consul.go文件

1.设置consul配置中心

// GetConsulConfig 设置配置中心
func GetConsulConfig(host string, port int64, prefix string) (config.Config, error) {
consulSource := consul.NewSource(
//设置配置中心的地址
consul.WithAddress(host+":"+strconv.FormatInt(port, 10)),
//设置前缀,不设置默认前缀 /micro/config
consul.WithPrefix(prefix),
//是否移除前缀,这里是设置为true,表示可以不带前缀直接获取对应配置
consul.StripPrefix(true),
)
//配置初始化
newConfig, err := config.NewConfig()
if err != nil {
return newConfig, err
}
//加载配置
err = newConfig.Load(consulSource)
return newConfig, err
}

2.获取consul配置中心的数据

  • 编写结构体(嵌套结构)
type Account struct {
Name string `json:"name"`
Title string `json:"title"`
Mode string `json:"mode"`
Port int64 `json:"port"`
Version string `json:"version"`
} type Mysql struct {
Host string `json:"host"`
User string `json:"user"`
Pwd string `json:"pwd"`
Database string `json:"database"`
Port int64 `json:"port"`
} type Log struct {
Level string `json:"level"`
Filename string `json:"filename"`
MaxSize int64 `json:"max_size"`
MaxAge int64 `json:"max_age"`
MaxBackips int64 `json:"max_backips"`
} type Redis struct {
Host string `json:"host"`
Port int64 `json:"port"`
Password string `json:"password"`
Db int64 `json:"db"`
PoolSize int64 `json:"pool_size"`
} type Email struct {
User string `json:"user"`
Pass string `json:"pass"`
Host string `json:"host"`
Port int64 `json:"port"`
Rename string `json:"rename"`
} type Consul struct {
Host string `json:"host"`
Port int64 `json:"port"`
Prefix string `json:"prefix"`
ConsulRegistry string `json:"consulRegistry"`
} type Jaeger struct {
ServiceName string `json:"serviceName"`
Addr string `json:"addr"`
} type Prometheus struct {
Host string `json:"host"`
Port int64 `json:"port"`
} type Ratelimit struct {
QPS int64 `json:"QPS"`
} type Micro struct {
Name string `json:"name"`
Version string `json:"version"`
Address string `json:"address"`
} type ConsulConfig struct {
Account Account `json:"account"`
Mysql Mysql `json:"mysql"`
Log Log `json:"log"`
Redis Redis `json:"redis"`
Email Email `json:"email"`
Consul Consul `json:"consul"`
Jaeger Jaeger `json:"jaeger"`
Prometheus Prometheus `json:"prometheus"`
Ratelimit Ratelimit `json:"ratelimit"`
Micro Micro `json:"micro"`
}
  • 获取consul数据
var(
ConsulInfo *ConsulConfig
) // GetAccountFromConsul 获取 consul 的配置
func GetAccountFromConsul(config config.Config, path ...string) error {
consulData := &ConsulConfig{}
config.Get(path...).Scan(consulData)
ConsulInfo = consulData
return nil
}

3.consul可视化界面数据编写

  • 点击Key/Value,再点击Create

  • 输入项目名称: micro/config/account
  • 选择JSON

  • 输入以下代码:
{
"account":{ "name": "Account", "title": "账号功能", "mode": "dev", "port": 9580, "version": "v0.0.1" },
"log":{ "level": "debug", "filename": "Account.log", "max_size": 200, "max_age": 30, "max_backips": 7 },
"mysql":{ "host":"127.0.0.1", "user":"root", "pwd":"xxx", "database":"micro", "port":3306 },
"redis":{ "host": "127.0.0.1", "port": 6379, "password": "123456", "db": 4, "pool_size": 100 },
"consul":{ "host": "localhost", "port": 8500, "prefix": "/micro/config", "consulRegistry": "127.0.0.1:8500" },
"email":{ "user": "xxx@qq.com", "pass": "xxx", "host": "smtp.qq.com", "port": 465, "rename": "Account" },
"jaeger":{ "serviceName": "go.micro.service.account", "addr": "localhost:6831" },
"prometheus":{ "host": "0.0.0.0", "port": 9089 },
"ratelimit":{ "QPS": 1000 },
"micro":{ "name": "go.micro.service.account", "version": "latest", "address": ":9580" }
}
  • 注意JSON格式,点击Save

4. main.go代码编写

// 1.配置中心
consulConfig, err := micro.GetConsulConfig("localhost", 8500, "/micro/config")
if err != nil {
fmt.Printf("Init consulConfig failed, err: %v\n", err)
}
// 2.注册中心
consulRegistry := consul.NewRegistry(func(options *registry.Options) {
options.Addrs = []string{
"127.0.0.1:8500",
}
})
if err := micro.GetAccountFromConsul(consulConfig, "account"); err != nil {
fmt.Printf("Init consul failed, err: %v\n", err)
}
fmt.Println(micro.ConsulInfo)
  • 这时候,micro中的ConsulInfo可以用来使用consul中的数据了,使用 . 取数据

五 最后

  • 至此,go-micro微服务consul配置、注册中心开发工作就正式完成。

  • 接下来就开始Mysql的代码编写了,希望大家关注博主和关注专栏,第一时间获取最新内容,每篇博客都干货满满。

欢迎大家加入 夏沫の梦的学习交流群 进行学习交流经验,点击

(6)go-micro微服务consul配置、注册中心的更多相关文章

  1. .Net Core with 微服务 - Consul 配置中心

    上一次我们介绍了Elastic APM组件.这一次我们继续介绍微服务相关组件配置中心的使用方法.本来打算介绍下携程开源的重型配置中心框架 apollo 但是体系实在是太过于庞大,还是让我爱不起来.因为 ...

  2. 【微服务】- Nacos - 注册中心

    微服务 - 注册中心 - Nacos 生命不息,写作不止 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! 上一 ...

  3. 微服务SpringCloud之注册中心Consul

    Consul 介绍 Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置.与其它分布式服务注册与发现的方案,Consul 的方案更“一站式”,内置了服务注册与发 ...

  4. 微服务Consul系列之服务注册与服务发现

    在进行服务注册之前先确认集群是否建立,关于服务注册可以看上篇微服务Consul系列之集群搭建的介绍,两种注册方式:一种是注册HTTP API.另一种是通过配置文件定义,下面讲解的是基于后者配置文件定义 ...

  5. 使用 Consul 作为 Python 微服务的配置中心

    使用 Consul 作为 Python 微服务的配置中心 Consul 作为数据中心,提供了 k/v 存储的功能,我们可以利用这个功能为 Python 微服务提供配置中心. Consul 提供了 HT ...

  6. spring cloud 专题二(spring cloud 入门搭建 之 微服务搭建和注册)

    一.前言 本文为spring cloud 微服务框架专题的第二篇,主要讲解如何快速搭建微服务以及如何注册. 本文理论不多,主要是傻瓜式的环境搭建,适合新手快速入门. 为了更好的懂得原理,大家可以下载& ...

  7. 基于Apollo实现.NET Core微服务统一配置(测试环境-单机)

    一.前言 注:此篇只是为测试环境下的快速入门.后续会给大家带来生产环境下得实战开发. 具体的大家可以去看官方推荐.非常的简单明了.以下介绍引用官方内容: Apollo(阿波罗)是携程框架部门研发的分布 ...

  8. 携程框架Apollo实现.NET Core微服务统一配置(测试环境-单机)

    Apollo实现.NET Core微服务统一配置(测试环境-单机) https://www.cnblogs.com/guolianyu/p/10065999.html 一.前言 注:此篇只是为测试环境 ...

  9. Taurus.MVC 微服务框架 入门开发教程:项目集成:1、服务端:注册中心、网关(提供可运行程序下载)。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

  10. 【微服务】- 配置中心 - Nacos

    微服务 - 配置中心 - Nacos 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! 今天的学习任务就是学习使用Nacos作为配置中心. 努力克制自己,拒绝摆烂! 什么是配 ...

随机推荐

  1. 关于StringBuffer和StringBuilder的使用

    String.StringBuffer.StringBuilder三者的异同? String:不可变的字符序列:底层使用char[]存储 StringBuffer:可变的字符序列:线程安全的,效率低: ...

  2. numba jit加速python程序

    numba numba加速循环.numpy的一些运算,大概是将python和numpy的一些代码转化为机器代码,速度飞快! 加速耗时很长的循环时: from numba import jit # 在函 ...

  3. springboot+vue 实现校园二手商城(毕业设计一)

    1.功能划分 2.实现的效果 2.1 登录页面 2.2 注册页面 2.3 商城首页 2.4 商品详情 2.5 购物车 2.6 订单 2.7 在线交流 2.8 公告信息 2.9 个人信息 3.后台管理界 ...

  4. 3.pygame快速入门-游戏循环及动画实现

    游戏循环的开始,意味着游戏的正式开始,游戏循环的作用如下 1.保证游戏不会直接退出 2.变化图像的位置--动画效果 3.检测用户交互--按键.鼠标等     游戏时钟 pyagame提供了一个pyga ...

  5. antd 批量上传文件逻辑

    基本步骤 通过 antd 框架的 Upload 控件,采用手动上传的方式,先选择需要上传的文件(控制文件数量以及大小),再根据所选的文件列表,循环上传,期间通过 Spin 控件提示上传中. 效果展示 ...

  6. Netty学习记录-入门篇

    你如果,缓缓把手举起来,举到顶,再突然张开五指,那恭喜你,你刚刚给自己放了个烟花. 模块介绍 netty-bio: 阻塞型网络通信demo. netty-nio: 引入channel(通道).buff ...

  7. webscraper 无代码爬虫

    官网:https://www.webscraper.io/web-scraper-first-time-install webscraper 简介 Web Scraper 是一款免费的,适用于普通用户 ...

  8. element-plus 消息提示

    用来显示「成功.警告.消息.错误」类的操作 <template> <el-button :plain="true" @click="open2" ...

  9. 【lwip】11-UDP协议&源码分析

    目录 前言 11.1 传输层说明 11.2 UDP协议简介 11.3 UDP特点 11.4 UDP端口号 11.5 UDP报文 11.6 UDP伪首部和校验和 11.7 wireshark报文分析 1 ...

  10. 微信小程序经纬度转化为具体位置(逆地址解析)

    小程序wx.getLocation只能获取经纬度, 这时候想要具体地址就需要借助第三方sdk(逆地址解析) 我这边第三方以腾讯位置服务举例 一. 首先小程序需要申请wx.getLocation接口权限 ...