简介

为什么需要配置中心

​ 我们现在有一个项目, 使用Gin进行开发的, 配置文件我们知道是一个config.yaml的文件, 也知道这个配置文件在项目启动时会被加载到内存中使用;

考虑三种情况:

a . 添加配置项

1 . 你现在的用户服务有10个部署实例, 那么添加配置项你得去十个地方修改配置文件还得重新启动等;

2 . 即使Go的viper能完成修改配置文件自动生效, 那么你得考虑其他语言是否能做到这点, 其他微服务是否一定会使用viper?

b . 修改配置项

大量的服务可能会使用同一个配置,比如我要更新jwt的secret,这么多实例怎么办?

c . 开发,测试,生产环境如何隔离

前面虽然已经介绍了viper,但是依然一样的问题,那么多服务如何统一这种考虑因素;

配置中心选型

目前最主流的分布式配置中心主要有spring cloud config,apollo和nacos,spring cloud属于spring体系, 我们就考虑apollo(携程)和nacos(阿里),都是目前比较流行且维护活跃的2个配置中心;

a . apollo大而全, 功能完善, nacos小而全, 可以对比django和flask区别;

b . 部署nacos更加简单;

c .nacos不止支持配置中心还支持服务注册和发现;

d . 都支持各种语言, 不过apollo是第三方支持的,nacos是官方支持各种语言;

nacos很活跃, 不过看的出来nacos想要构建的生态野心更大, 不过收费意图明显;

Nacos安装

https://nacos.io/zh-cn/docs/what-is-nacos.html

  1. docker run --name nacos-standalone -e MODE=standalone -e JVM_XMS=512m -e JVM_MAX=512m -e JVM_XMN=256m -p 8848:8848 -d nacos/nacos-server:latest

Nacos使用

配置

命名空间

可以隔离

新建

组 - 隔离

抛出一个问题: 你现在确实能够隔离微服务, 但是把不同微服务的开发,测试,生产如何区别;

此时就可以用组隔离了

dataid - 配置集

一个配置集就是一个配置文件,实际可以更灵活, 将db,server内容等配置分开管理;

Go集成Nacos

安装

  1. go get -u github.com/nacos-group/nacos-sdk-go

Go操作Nacos

https://github.com/nacos-group/nacos-sdk-go/blob/master/README_CN.md

Example1

  1. package main
  2. import (
  3. "fmt"
  4. "github.com/nacos-group/nacos-sdk-go/clients"
  5. "github.com/nacos-group/nacos-sdk-go/common/constant"
  6. "github.com/nacos-group/nacos-sdk-go/vo"
  7. "time"
  8. )
  9. func main() {
  10. sc := []constant.ServerConfig{{
  11. IpAddr: "192.168.0.4",
  12. Port: 8848,
  13. }}
  14. cc := constant.ClientConfig{
  15. NamespaceId: "e6295280-8bc8-424e-b9c6-2eb61da8a189", // 如果需要支持多namespace,我们可以场景多个client,它们有不同的NamespaceId。当namespace是public时,此处填空字符串。
  16. TimeoutMs: 5000,
  17. NotLoadCacheAtStart: true,
  18. LogDir: "log",
  19. CacheDir: "cache",
  20. RotateTime: "1h",
  21. MaxAge: 3,
  22. LogLevel: "debug",
  23. }
  24. configClient, err := clients.CreateConfigClient(map[string]interface{}{
  25. "serverConfigs": sc,
  26. "clientConfig": cc,
  27. })
  28. if err != nil {
  29. panic(err)
  30. }
  31. content, err := configClient.GetConfig(vo.ConfigParam{
  32. DataId: "user-web.yaml",
  33. Group: "dev",
  34. })
  35. if err != nil {
  36. panic(err)
  37. }
  38. fmt.Println(content) //字符串 - yaml
  39. err = configClient.ListenConfig(vo.ConfigParam{
  40. DataId: "user-web.yaml",
  41. Group: "dev",
  42. OnChange: func(namespace, group, dataId, data string) {
  43. fmt.Println("配置文件发生了变化...")
  44. fmt.Println("group:" + group + ", dataId:" + dataId + ", data:" + data)
  45. },
  46. })
  47. time.Sleep(300 * time.Second)
  48. }

配置映射为struct

go内置json,可以不用引入第三方Yaml,可以用以下网站转换下:

http://json2yaml.com/convert-yaml-to-json

  1. {
  2. "name": "user-web",
  3. "port": 9001,
  4. "user_srv": {
  5. "host": "192.168.0.84",
  6. "port": 50051,
  7. "name": "user_srv"
  8. },
  9. "redis": {
  10. "host": "47.94.149.143",
  11. "password": "wunai.18",
  12. "port": 6379,
  13. "db": 0,
  14. "expire": 3000
  15. },
  16. "jwt": {
  17. "key": "!42&%MFFezZmB8a^RhUiGa$l5g2z65HZ"
  18. },
  19. "ali_sms": {
  20. "key": "LTAI4GAdvAHSnQGAuiu2vicL",
  21. "secrect": "ZfneNg1Sa6bEpbVHlP16nCTmT9dInh"
  22. },
  23. "consul": {
  24. "host": "192.168.0.4",
  25. "port": 8500
  26. }
  27. }

配置中心之Nacos简介,使用及Go简单集成的更多相关文章

  1. 【springcloud alibaba】配置中心之nacos

    接着上一篇的[springcloud alibaba]注册中心之nacos,这一篇主要讲nacos的配置中心能力.nacos的集群部署及持久化请看上一篇. ---------------------- ...

  2. 配置中心:Nacos, Apollo, Consul, Etcd

    Nacos, Apollo, Consul, Etcd 服务.应用不同粒度的配置更丰富的路由规则集中式管理的动态参数规则

  3. Spring Cloud入门-Nacos实现注册和配置中心(Hoxton版本)

    文章目录 摘要 Nacos简介 使用Nacos作为注册中心 安装并运行Nacos 创建应用注册到Nacos 负载均衡功能 使用Nacos作为配置中心 创建nacos-config-client模块 在 ...

  4. Nacos系列:基于Nacos的配置中心

    前言 在看正文之前,我想请你回顾一下自己待过的公司都是怎么管理配置的,我想应该会有以下几种方式: 1.硬编码 没有什么配置不配置的,直接写在代码里面,比如使用常量类 优势:对开发友好,开发清楚地知道代 ...

  5. Spring Cloud 系列之 Alibaba Nacos 配置中心

    Nacos 介绍 Nacos 是 Alibaba 公司推出的开源工具,用于实现分布式系统的服务发现与配置管理.英文全称 Dynamic Naming and Configuration Service ...

  6. Nacos配置中心和服务的注册发现

    在上一篇中,我们已经把Nacos的集群搭建好了,那么既然已经搭建好了,就要在咱们的项目中去使用.Nacos既可以做配置中心,也可以做注册中心.我们先来看看在项目中如何使用Nacos做配置中心. Nac ...

  7. Spring Cloud Config、Apollo、Nacos配置中心选型及对比

    Spring Cloud Config.Apollo.Nacos配置中心选型及对比 1.Nacos 1.1 Nacos主要提供以下四大功能 2.Spring Cloud Config 3.Apollo ...

  8. Nacos配置中心交互模型是 push 还是 pull ?你应该这么回答

    本文案例收录在 https://github.com/chengxy-nds/Springboot-Notebook 大家好,我是小富- 对于Nacos大家应该都不太陌生,出身阿里名声在外,能做动态服 ...

  9. 「Java分享客栈」Nacos配置中心称王称霸,我Apollo一生也不弱于人!

    前言 Apollo又称阿波罗配置中心,在前两年还是挺火的,但阿里SpringCloud套件席卷国内之后,nacos就成为了最被亲睐的分布式配置中心,nacos是配置中心和注册中心二合一的产品,单纯功能 ...

随机推荐

  1. CRM应用中可能发生的问题

    CRM系统是公认的提升企业竞争力的强大工具.它既是以客户为中心的思想,又是一种企业管理方案.当然,它还是一种管理软件.在国外,CRM使企业运营得风生水起,但在我国的企业应用中,还是有着很高的失败率和使 ...

  2. ES6中的Set和Map对象数据结构

    set对象数据结构 构建某一类型的对象 -对象的实例化 let arr = [1, 2, 3, 3, 4, 5] let rec = new Set(arr)//可以传参数,数组或者对象 consol ...

  3. select 语句的基础语法

    授权语法sql 一.用户的创建与使用 在管理员登录后可创建用户 --创建qfplan用户-create user qfplan identified by qfplan; --用户基本权限授权gran ...

  4. [刷题] PTA 6-7 统计某类完全平方数

    要求: 实现一个函数,判断任一给定整数N是否满足条件:它是完全平方数,又至少有两位数字相同,如144.676等. 函数接口定义: int IsTheNumber ( const int N ); 其中 ...

  5. [算法] O(n^2)排序算法的效率比较

    选择.插入排序 main.cpp 1 #include <iostream> 3 #include "SortTestHelper.h" 4 5 using names ...

  6. [Java] 分布式消息队列(MQ)

    概述 场景 服务解耦 削峰填谷 异步化缓冲:最终一致性/柔性事务 MQ应用思考点 生产端可靠性投递 消费端幂等:消息只能消费一次 高可用.低延迟.可靠性 消息堆积能力 可扩展性 业界主流MQ Acti ...

  7. 列表 元组 sort

    列表 增append insert extend 迭代增加删 remove delete pop clear改 li[索引]="被修改的内容":切片"" 列表 ...

  8. testlink安装(mac os)

    安装依赖:xampp.mysql.testlink 一.xampp安装(参考:https://blog.csdn.net/it_cgq/article/details/79430511) 1.下载xa ...

  9. Linux 部署 iSCSI 服务端

    Linux 部署 iSCSI 服务端 服务端实验环境 iSCSI-server :RHEL8 IP:192.168.121.10 一.服务端安装 target 服务和 targetcli 命令行工具 ...

  10. linux rpm包解压

    rpm2cpio xxx.rpm | cpio -div