(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作为配置中心. 努力克制自己,拒绝摆烂! 什么是配 ...
随机推荐
- LeetCode------递归(爬楼梯)
1.递归 1.一个问题的解可以分解为几个子问题的解. 2.这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样 3.存在基线/终止条件 来源:力扣(LeetCode) 链接:https:// ...
- 齐博x1标签实例:做模板组图单图无图混排的处理
代码如下, {qb:tag name="xxx" type="cms" rows="10"} {if ( count($rs['picurl ...
- NLP之基于Bi-LSTM和注意力机制的文本情感分类
Bi-LSTM(Attention) @ 目录 Bi-LSTM(Attention) 1.理论 1.1 文本分类和预测(翻译) 1.2 注意力模型 1.2.1 Attention模型 1.2.2 Bi ...
- HTML元素大全(1)
01.基础元素 <h1/2/3/4/5/6>标题 从大h1到小h6,块元素,有6级标题.是一种标题类语义标签,内置了字体.边距样式. 合理使用h标签,主要用于标题,不要为了加粗效果而随意使 ...
- Windows 环境搭建 PostgreSQL 逻辑复制高可用架构数据库服务
本文主要介绍 Windows 环境下搭建 PostgreSQL 的主从逻辑复制,关于 PostgreSQl 的相关运维文章,网络上大多都是 Linux 环境下的操作,鲜有在 Windows 环境下配置 ...
- k8s运维之pod排错
k8s运维之pod排错 K8S是一个开源的,用于管理云平台中多个主机上的容器化应用,Kubernetes的目标是让部署容器化变得简单并且高效 K8S的核心优势: 1,基于yaml文件实现容器的自动创建 ...
- 一键部署haproxy脚本
HAPROXY_VERSION=2.6.6 HAPROXY_FILE=haproxy-${HAPROXY_VERSION}.tar.gz #HAPROXY_FILE=haproxy-2.2.12.ta ...
- Azure Devops Create Project TF400711问题分析解决
前几天,团队使用Azure Devops创建团队项目出了一个奇怪的错误: TF400797: 作业扩展具有一个未处理的错误: Microsoft.TeamFoundation.Framework.Se ...
- 高精度加法(Java)
题目描述 高精度加法,相当于 a+b problem,不用考虑负数. 输入格式 分两行输入. a , b ≤ 10^500 输出格式 输出只有一行,代表 a + b 的值. 思路 使用数组进行模拟, ...
- 我的第一个项目(二):使用Vue做一个登录注册界面
好家伙, 顶不住了,太多的bug, 本来是想把背景用canvas做成动态的,但是,出现了各种问题 为了不耽误进度,我们先把一个简单的登录注册界面做出来 来看看效果: (看上去还不错) 本界面使用 ...