zoukankan      html  css  js  c++  java
  • Dotnet微服务:使用Apollo实现统一配置管理

    随着项目中的服务数据越来越多,如何管理各个服务的配置数据成为需要解决的问题,如果每个服务的配置数据都放在自身的配置文件下,无疑会带来很大的管理开销,搭建统一的配置中心成为主流。目前流行的配置中心有Springcloud config、apollo、consul等,由于springcloud config在dotnet上的支持不太好,尤其是在实时更新上比较麻烦,需要自已用rabbit做事件总线来实现热更新,所以我倾向于由携程开发出的apollo项目,开源地址

    一,安装并启用apollo。

    1,Centeros ,安装 jdk1.8

    yum install java-1.8.0-openjdk.x86_64 
    

    安装Mysql

    wget -i -c https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

    下载到指定位置后,就可以执行安装了

    yum -y install mysql80-community-release-el7-3.noarch.rpm
    yum -y install mysql-community-server

    查看mysql root账户的初始密码:grep "password" /var/log/mysqld.log

    登录mysql:mysql -uroot -p

    修改root密码:登录后执行alter user 'root'@'localhost' identified by 'Xxxxx@xx.com'

    2,下载Apollo quick start包:下载地址

    创建数据库:下载好apollo-quick-start后解压,目录内有个sql的文件夹,里面有sql模板,直接导入即可:

    登录数据库后执行:

    source /apollo/apollo-quick-start-1.5.0/sql/apolloconfigdb.sql。

    source /apollo/apollo-quick-start-1.5.0/sql/apolloportaldb.sql。

     /apollo/apollo-quick-start-1.5.0为sql模板文件所在目录

    3,启动项目

    vi demo.sh,修改数据库连接信息

    启动项目:./demo.sh start

    开放端口:8080 ,8070。firewall-cmd --zone=public --add-port=8090/tcp --permanent。 其中8080为eureka服务监听地址,8070为apollo管理系统地址。

    重新加载防火墙:firewall-cmd --reload

    打开管理地址:http://<当前主机ip>:8070并使用用户apollo和密码admin登录

    4,创建项目

    创建项目后添加键值对并发布。这里我添加了一个key为mysql.connectString的数据。

    ,DotnetCore集成apollo

    1,配置:

    appsetting.json添加apollo配置信息,Appid为上面创建的项目appid,MetaServer地址为apollo项目注册到的eureka服务器地址。

     "apollo": {
        "AppId": "IdentitySerivce",
        "MetaServer": "http://192.168.137.2:8080"
      }
    

    Program.CS中启用apollo。

      public static IHostBuilder CreateHostBuilder(string[] args) =>
                Host.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration((hostingcontext, builder) =>
                {
                    builder.AddApollo(builder.Build().GetSection("apollo")).AddDefault();
                })
                    .ConfigureWebHostDefaults(webBuilder =>
                    {
                        webBuilder.UseStartup<Startup>();
                    });
    

    2,读取配置中心的数据。

    新建一个接口getConfig

     [Route("api/[controller]")]
        [ApiController]
        public class ConfigController : ControllerBase
        {
            IConfiguration Configuration;
            public ConfigController(IConfiguration Configuration)
            {
                this.Configuration = Configuration;
            }
            [HttpGet("GetConfig")]
            public string GetConfig(string data)
            {
                return this.Configuration[data];
            }
        }
    

    访问该接口

     在apollo上修改数据后重新发布再次访问该接口。

      集成apollo后,修改配置文件后是即时生效的,不需要做任何操作。

    3,apollo的namespace

    apollo配置中心的namespace分有私有和公有,私有的namespace的数据只能相对应的appid才能访问到其数据,而公有的namespace下的数据可以被任意应用访问。

    下面用实例讲讲apollo的namespace的用法

    比如,多个应用要注册到eureka服务注册中心需要对这些应用做配置,其中一些内容是相同的,比如服务注册地址等。有些内容是独有的,比如注册到eureka的端口等。这时就可以用到apollo的namespace特性了,相同的配置停下写在一个共享的namespance下,独有配置信息写在私有的namespace下。

    在apollo下建立一个项目,用于存放共享的配置信息。项目创建完成后点击左下角的“添加Namespace”即可创建新的namespace

    然后在此公共namespance下建立键值对数据并发布。注意:用于DOTNETCORE项目的配置数据需要用冒号隔开。

    在之前创建的“IdentityService”项目中新建独有的配置信息:

     最后,将公共命令空间配置添加到DotnetCore项目

      public static IHostBuilder CreateHostBuilder(string[] args) =>
                Host.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration((hostingcontext, builder) =>
                {
                    builder.AddApollo(builder.Build().GetSection("apollo")).AddDefault().AddNamespace("TEST1.common");
                })
                    .ConfigureWebHostDefaults(webBuilder =>
                    {
                        webBuilder.UseStartup<Startup>();
                    });
    

      启动项目,发现Eureka已经收到注册信息:

  • 相关阅读:
    2016年11-29 mysql数据库
    2016年11月25日网页项目知识
    11月22日 网页项目遇到知识
    2016年11月15
    document操作
    2016年11月8日 函数
    2016年11月7日 数组练习
    2016年11月6日数组
    2016年11月4日运算符与语句
    2016年11月3日JS脚本简介数据类型: 1.整型:int 2.小数类型: float(单精度) double(双精度) decimal () 3.字符类型: chr 4.字符串类型:sting 5.日期时间:datetime 6.布尔型数据:bool 7.对象类型:object 8.二进制:binary 语言类型: 1.强类型语言:c++ c c# java 2.弱类型语
  • 原文地址:https://www.cnblogs.com/liujiabing/p/13828433.html
Copyright © 2011-2022 走看看