• 分布式配置中心之Apollo X


    Apollo(阿波罗)是携程开源的一款可靠的分布式配置管理中心,它能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。

    服务搭建:

    Apollo 官方提供了一个方便学习使用的docker-quick-start 环境。我们只需要git clone 官方仓库,就可以在项目中的scripts目录下找到这个docker-quick-start文件夹。

    git clone https://github.com/apolloconfig/apollo.git
    
    cd apollo/scripts/docker-quick-start/

    docker-quick-start目录下执行下面的命令启动容器。

    docker-compose up

    等镜像下载完,容器启动之后,就可以访问本地的http://localhost:8070查看Apollo管理后台了。

     输入用户名apollo,密码admin后登录管理后台。

    Apollo支持4个维度管理Key-Value格式的配置:

    • application (应用)
    • environment (环境)
    • cluster (集群)
    • namespace (命名空间)

    十分推荐大家看一下官方的Apollo使用指南,文档读到位,必定事半功倍。

    社区中有很多 Go语言Apollo客户端可供选择,本文以https://github.com/philchia/agollo为例讲解如何使用Go语言接入Apollo获取配置。此外,也可以使用https://github.com/shima-park/agollo支持搭配 Viper 来使用。

    平台常用修改项:

    1.添加环境, 默认只有一个dev环境

    在 管理员工具 > 系统参数 , 搜索参数: configView.memberOnly.envs

    2. 

    [golang]

    go get -u github.com/philchia/agollo/v4
    package main
    
    import (
        "fmt"
        "log"
    
        "github.com/philchia/agollo/v4"
    )
    
    func main() {
        agollo.Start(&agollo.Conf{
            AppID:           "SampleApp",
            Cluster:         "dev",
            NameSpaceNames:  []string{"application.properties", "shopping_cart.yaml"},
            MetaAddr:        "http://localhost:8080",
            AccesskeySecret: "b8ceb3ec62f34030b1b1fd9a431e420b",  //1.6.0版本之后 增加了密钥机制, 只有应用开启访问密钥,必须配置该项
        })
    
        agollo.OnUpdate(func(event *agollo.ChangeEvent) {
            // 监听配置变更
            log.Printf("event:%#v\n", event)
        })
        log.Println("初始化Apollo配置成功")
    
        // 从默认的application.properties命名空间获取key的值
        val := agollo.GetString("timeout")
        log.Println(val)
        // 获取命名空间下所有key
        keys := agollo.GetAllKeys(agollo.WithNamespace("shopping_cart.yaml"))
        fmt.Println(keys)
        // 获取指定一个命令空间下key的值
        other := agollo.GetString("content", agollo.WithNamespace("shopping_cart.yaml"))
        log.Println(other)
        // 获取指定命名空间下的所有内容
        namespaceContent := agollo.GetContent(agollo.WithNamespace("shopping_cart.yaml"))
        log.Println(namespaceContent)
    }

    注意:  如果这里使用yaml配置的话, 需要使用GetContent的方式获取内容, 不能使用GetString, 尤其配置的是int类型的key的话

    [Python]

    使用客户端:https://github.com/filamoon/pyapollo

    安装:

    1)下载包
    2)python setup.py install

    使用:

    from pyapollo.apollo_client import ApolloClient
    
    
    def main():
        config = {
            'app_id': 'tta',
            'cluster': 'dev',
            'config_server_url': 'http://192.168.136.241:8080',
        }
        client = ApolloClient(**config)
        value = client.get_value('user.name')
        print('Value:', value)
    
    
    if __name__ == '__main__':
        main()

    缺点: 不支持密钥参数, 可以自己将这块进行重写支持即可

  • 相关阅读:
    IE8下提示'console'未定义错误
    左右添加和删除
    箭头函数
    事件冒泡
    选中状态改变,并且实现左边选中便便添加
    appcan里面模板的使用
    白面机器学习笔记(一)
    常见的模型加速方法
    相机的参数
    深度学习和机器学习的区别
  • 原文地址:https://www.cnblogs.com/xingxia/p/config_center_apollo.html
Copyright © 2020-2023  润新知