(6)go-micro微服务consul配置、注册中心
一 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配置、注册中心的更多相关文章
- .Net Core with 微服务 - Consul 配置中心
上一次我们介绍了Elastic APM组件.这一次我们继续介绍微服务相关组件配置中心的使用方法.本来打算介绍下携程开源的重型配置中心框架 apollo 但是体系实在是太过于庞大,还是让我爱不起来.因为 ...
- 【微服务】- Nacos - 注册中心
微服务 - 注册中心 - Nacos 生命不息,写作不止 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! 上一 ...
- 微服务SpringCloud之注册中心Consul
Consul 介绍 Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置.与其它分布式服务注册与发现的方案,Consul 的方案更“一站式”,内置了服务注册与发 ...
- 微服务Consul系列之服务注册与服务发现
在进行服务注册之前先确认集群是否建立,关于服务注册可以看上篇微服务Consul系列之集群搭建的介绍,两种注册方式:一种是注册HTTP API.另一种是通过配置文件定义,下面讲解的是基于后者配置文件定义 ...
- 使用 Consul 作为 Python 微服务的配置中心
使用 Consul 作为 Python 微服务的配置中心 Consul 作为数据中心,提供了 k/v 存储的功能,我们可以利用这个功能为 Python 微服务提供配置中心. Consul 提供了 HT ...
- spring cloud 专题二(spring cloud 入门搭建 之 微服务搭建和注册)
一.前言 本文为spring cloud 微服务框架专题的第二篇,主要讲解如何快速搭建微服务以及如何注册. 本文理论不多,主要是傻瓜式的环境搭建,适合新手快速入门. 为了更好的懂得原理,大家可以下载& ...
- 基于Apollo实现.NET Core微服务统一配置(测试环境-单机)
一.前言 注:此篇只是为测试环境下的快速入门.后续会给大家带来生产环境下得实战开发. 具体的大家可以去看官方推荐.非常的简单明了.以下介绍引用官方内容: Apollo(阿波罗)是携程框架部门研发的分布 ...
- 携程框架Apollo实现.NET Core微服务统一配置(测试环境-单机)
Apollo实现.NET Core微服务统一配置(测试环境-单机) https://www.cnblogs.com/guolianyu/p/10065999.html 一.前言 注:此篇只是为测试环境 ...
- Taurus.MVC 微服务框架 入门开发教程:项目集成:1、服务端:注册中心、网关(提供可运行程序下载)。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...
- 【微服务】- 配置中心 - Nacos
微服务 - 配置中心 - Nacos 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! 今天的学习任务就是学习使用Nacos作为配置中心. 努力克制自己,拒绝摆烂! 什么是配 ...
随机推荐
- Hbase之API基本操作
API之框架 private static Admin admin = null; private static Connection connection = null; private stati ...
- bean文档类型定义
ELEMENT:表示当前 (bean*):表示0到多个bean元素 (property*):表示0到多个property元素 ATTLIST:表示属性 #REQUIRED:表示不可缺少 #IMPLIE ...
- eDP接口简介
1. eDP背景介绍 随着显示分辨率的越来越高,传统的VGA.DVI等接口逐渐不能满足人们的视觉需求. 随后就产生了以HDMI.DisplayPort为代表的新型数字接口,外部接口方面HDMI占据 ...
- Codeforces Round #829 (Div. 2) A-E
比赛链接 A 题解 知识点:枚举. 只要一个Q后面有一个A对应即可,从后往前遍历,记录A的数量,遇到Q则数量减一,如果某次Q计数为0则NO. 时间复杂度 \(O(n)\) 空间复杂度 \(O(1)\) ...
- WPF之MVVM实践中的Command与CommandParameter
先记录一下,方便以后复习. https://www.cnblogs.com/babietongtianta/p/3474101.html
- RabbitMQ 常见问题
RabbitMQ 常见问题 昔我往矣,杨柳依依.今我来思,雨雪霏霏. 1.什么是RabbitMQ? RabbitMQ是一款开源的.Erlang编写的消息中间件:最大的特点就是消费并不需要确保提供方存 ...
- 【云原生 · Kubernetes】Kubernetes基础环境搭建
1.系统镜像 安装运行环境系统要求为CentOS7.5,内核版本不低于3.10. CentOS-7.5-x86_64-DVD-1804.iso Chinaskill_Cloud_PaaS.iso Do ...
- 基于python的数学建模---场线与数值解(微分方程)
import numpy as np from scipy import integrate import matplotlib.pyplot as plt import sympy def plot ...
- Mysql5.6.44版本安装及基本配置
内容概要 存储数据的演变史 数据库软件应用史 MySQL简介 MySQL下载及安装 MySQL配置 存储数据的演变史 1.文本文件: 文件路径不固定,并且数据格式不统一 2.软件开发目录规范: 规定了 ...
- Python基础之数据库:2、MySQL的下载与安装、基本使用、系统服务制作
目录 一.MySQL简介 二.安装与下载 1.下载流程 2.配置环境变量 三.主要目录介绍 四.基本使用 五.系统服务的制作 六.密码相关 1.修改管理员密码 2.忘记密码 一.MySQL简介 M ...