一、开场白

在系统设计里我们有很多配置希望独立于系统之外,而又能够被系统实时读取。但是在传统的系统设计里,配置信息通常是耦合在系统内的,比如.net里通常会放在App.config或者web.config里,.net core则是appsettings.json里,这些都不够灵活,如果在制度严格,不允许随便登录服务器的中大型公司里,每次的配置更改就意味着系统的发布,毫无疑问,肯定有带哥要吐槽了,什么垃圾架构!为了解决这一问题,Apollo应运而生,专门用来构建微服务架构里的配置中心,在实际生产项目里为了达到高可用,我们会将其以分布式的方式部署。

粘贴下官方的下载和文档:

官网:https://github.com/ctripcorp/apollo

Wiki:https://github.com/ctripcorp/apollo/wiki(一切的集成方式和使用方法都在这里)

Issues:https://github.com/ctripcorp/apollo/issues(如果期间有任何问题,请通过这里查找大部分解决方法)

二、Maven编译源码

首先要说明一下,官方提供的Quick Start以及预先打好的安装包如果不进行特殊配置都只能单机搭建使用,通过所以如果你想把Apollo搭建在公有云或者调用放和部署不在同一环境,最好自己编译项目。

我这里使用阿里云搭建Apollo,系统是CentOs 7。

1.首先我们需要在以下地址下载源码:

https://github.com/ctripcorp/apollo/releases

2. 源码下载完成后我们需要修改两个地方,Apoolo是微服务架构,使用Eureka实现服务的注册和发现,分布式部署的时候,apollo-configserviceapollo-adminservice需要把自己的IP和端口注册到MetaServer(apollo-configservice本身)Server(apollo-configservice本身)。所以如果实际部署的机器有多块网卡(如docker),或者存在某些网卡的IP是Apollo客户端和Portal无法访问的(如网络安全限制),那么我们就需要在apollo-configserviceapollo-adminservice中做相关限制以避免Eureka将这些网卡的IP注册到Meta Server。

我这里的解决方式是直接指定IP。通过修改apollo-adminservice或apollo-configservice 的bootstrap.yml文件,指定apollo-configservice和apollo-adminservice的IP端口。

解压源码文件,通过 apollo-1.3.0\apollo-adminservice\src\main\resources 找到 bootstrap.yml 文件,添加以下配置:

eureka:  instance:ip-address: xx.xx.xx.xx    hostname: ${hostname:47.99.92.76}    preferIpAddress: true    status-page-url-path: /info    health-check-url-path: /health  client:    serviceUrl:      # This setting will be overridden by eureka.service.url setting from ApolloConfigDB.ServerConfig or System Property      # see com.ctrip.framework.apollo.biz.eureka.ApolloEurekaClientConfig      defaultZone: http://${eureka.instance.hostname}:8080/eureka/    healthcheck:      enabled: true    eurekaServiceUrlPollIntervalSeconds: 60

management:  health:    status:      order: DOWN, OUT_OF_SERVICE, UNKNOWN, UP 

ip-address是我阿里云的公有IP,其它部署环境同理。

通过 apollo-1.3.0\apollo-configservice\src\main\resources 找到 bootstrap.yml 文件,配置同上。

同时我们还需要配置下MySQL数据库的链接信息,通过 apollo-1.3.0\scripts 找到 build.sh 文件,编辑链接信息:

# apollo config db infoapollo_config_db_url=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8apollo_config_db_username=xxxapollo_config_db_password=xxx

# apollo portal db infoapollo_portal_db_url=jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8apollo_portal_db_username=xxxapollo_portal_db_password=xxx

因为我的MySQL就是部署在同一个阿里云上,所以就使用localhost,大家酌情修改。

Apollo依赖于MySQL,我们需要先把其对应的数据库跑出来,通过以下路径加载两个sql文件:

Configdb:apollo-1.3.0\scripts\db\migration\configdb

Portaldb:apollo-1.3.0\scripts\db\migration\portaldb

配置就到这里,接下来我们要安装Maven环境来编译源码:

1.安装maven

wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz

Windows环境通过本文安装:https://blog.csdn.net/Snowprincev/article/details/81670037

2、解压安装

tar -zxvf apache-maven-3.3.9-bin.tar.gz

mv apache-maven-3.3.9 /usr/local/maven-3.3.9

3、配置环境变量

vi /etc/profile

#在适当的位置添加

export M2_HOME=/usr/local/maven3  (这里需要制定你的安装目录 自定义的哈)

export PATH=$PATH:$JAVA_HOME/bin:$M2_HOME/bin

4、使配置生效

保存退出后运行下面的命令使配置生效,或者重启服务器生效。

source /etc/profile

5、验证版本

mvn -v

6.配置阿里云仓库,国内速度快

在maven的settings.xml 文件里配置mirrors的子节点,添加如下mirror:

<mirror>        <id>nexus-aliyun</id>        <mirrorOf>*</mirrorOf>        <name>Nexus aliyun</name>        <url>http://maven.aliyun.com/nexus/content/groups/public</url>    </mirror> 

7.阿里云cd到源码文件夹路径 apollo-1.3.0\scripts ,执行以下命令编译源码:

该脚本会依次打包apollo-configservice, apollo-adminservice, apollo-portal。

8.编译完成后

获取位于apollo-configservice/target/目录下的apollo-configservice-x.x.x-github.zip。解压后执行scripts/startup.sh即可。如需停止服务,执行scripts/shutdown.sh.

获取位于apollo-adminservice/target/目录下的apollo-adminservice-x.x.x-github.zip。解压后执行scripts/startup.sh即可。如需停止服务,执行scripts/shutdown.sh.

获取位于apollo-portal/target/目录下的apollo-portal-x.x.x-github.zip。解压后执行scripts/startup.sh即可。如需停止服务,执行scripts/shutdown.sh.

OK,上面3个启动后,我们就可以通过Ip:8070 访问Apollo的UI界面的,通过默认的 账户密码登录:apollo/admin

通过IP:8080访问Eureka的UI界面查看被注册的configure和admin两个进程。

二、新建.Net Core API项目试用

1.新建.net core api项目,通过nuget引入项目包:Com.Ctrip.Framework.Apollo.Configuration。

2.在Program.cs中添加如下代码:

    public class Program    {public static void Main(string[] args)        {            CreateWebHostBuilder(args).Build().Run();        }

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>            WebHost.CreateDefaultBuilder(args)            .ConfigureAppConfiguration((hostingContext, builder) =>            {                builder                .AddApollo(builder.Build().GetSection("apollo"))                .AddDefault();            })                .UseStartup<Startup>();    }

3.appsettings.json中进行如下配置,我们这里试用默认自带的SimpleApp测试:

{"apollo": {"AppId": "SampleApp","MetaServer": "http://47.99.92.76:8080","Env": "Dev"  }}

这里配置的意思是客户端需要通过Eureka查询Configure服务的地址,从而获取配置信息。

  private IConfiguration _configuration;

public ValuesController(IConfiguration configuration)        {            _configuration = configuration;        }

        [HttpGet]public ActionResult<IEnumerable<string>> Get()        {string title = _configuration["timeout"];return new string[] { "value1", "value2", title };        }

运行项目查看:

OK,运行成功,更多信息大家可以去官方gitHub查看哦,目前博主所在的公司已经使用Apollo很久了,而且.net 端一个分支的维护者还是博主公司架构组的一位同事,就是下面这个:

看下使用Apollo后的项目运行图,服务配置数据可以正常请求:

今天就到这了,12点睡觉了!!

原文地址:https://www.cnblogs.com/weiBlog/p/10771969.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 

分布式部署携程Apollo构建配置中心相关推荐

  1. .Net Core 商城微服务项目系列(十四):分布式部署携程Apollo构建配置中心

    一.开场白 在系统设计里我们有很多配置希望独立于系统之外,而又能够被系统实时读取.但是在传统的系统设计里,配置信息通常是耦合在系统内的,比如.net里通常会放在App.config或者web.conf ...

  2. Docker部署携程Apollo

    Docker部署携程Apollo 下载Apollo源码 执行Apollo脚本(MySQL) 修改Apollo配置 修改build.bat脚本 打开build.bat文件所在文件夹,双击运行 创建apo ...

  3. SpringCloud - Spring Cloud 之 Apollo Config携程阿波罗配置中心(二十一)

    由于Spring Cloud自带的Config 需要配合 Bus 使用,且不能实时刷新,因此市面上出现了很多开元的配置中心 市面上开源的配置中心 Apollo(阿波罗):携程框架部门研发的分布式配置中 ...

  4. 携程Apollo动态配置日志级别

    在application.properties中配置 logging.level.com.umgsai.core.dal=debug 可以在日志中打印出详细的SQL语句. 但是并不希望在线上环境也打印 ...

  5. 携程 Apollo 配置中心 | 学习笔记(七) | 如何将配置文件敏感信息加密?

    携程 Apollo 配置中心 | 学习笔记(一) Apollo配置中心简单介绍 携程 Apollo 配置中心 | 学习笔记(二) Windows 系统搭建基于携程Apollo配置中心单机模式 携程 A ...

  6. 携程apollo系列-个人开发环境搭建

    本博客讲详细讲解如何在 Windows 搭建携程 Apollo 服务器 (用户个人开发). 开发服务器有多种搭建方式: (1) docker, 搭建过程非常简单, 推荐有 docker 环境 (2) ...

  7. FastD 最佳实践二: 构建配置中心

    过去专门做了一篇文档来构建配置中心,基于 zookeeper 的配置中心. 环境要求及构建步骤可参考: QConf搭建配置中心 随着业务增长,部署的机器可能会随着增长,增加配置难度和维护难度.配置会因 ...

  8. 携程Apollo分布式配置中心搭建指南

    Apollo配置中心介绍 Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性. ...

  9. Spring Boot 整合携程Apollo 配置中心

    作者:AaronSimon blog.csdn.net/AaronSimon/article/details/83657612 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理 ...

最新文章

  1. gitlab8.2-8.16-8.17-9.0升级
  2. shell的if判断比较
  3. php 提取登录QQsid_php模拟登录qq邮箱(curl命令详解)
  4. vscode编辑器tab换行缩进问题
  5. xgboost 正则项_XGBoos算法背后的数学:尽可能简单地解释XGBoost算法背后的机制
  6. mybatis_user_guide(6) Java API
  7. oracle存储过程深入,深入了解oracle存储过程的优缺点
  8. R^2 score is not well-defined with less than two samples
  9. 32、多租户(multi-tenancy)
  10. 抓取淘宝某类商品名称和价格
  11. 怎么把PDF分割成几个文件?分享几种分割方法
  12. layui控制table列长度_layui表头宽度和表格一致_天天都要用的10个word表格技巧,工作再忙都要学会!!......
  13. 基于C#+SQL Server实现(Web)学生选课管理系统【100010309】
  14. 微信引流的方式 PC控制手机的方式
  15. 大数据技术-Kerberos学习笔记
  16. c++/qt/opencv实现魔方复原【机器人应用】
  17. 【SVN】Switch分支提示“没有共同祖先”
  18. Hp-socket高性能网络库二--tcp组件pull接收模型
  19. hdu4526威威猫系列故事——拼车记
  20. Jackson注解 @JsonCreator

热门文章

  1. 在Ubuntu Linux中获取上次访问的文件时间
  2. 火狐查cookie_Firefox 65默认会阻止跟踪Cookie
  3. 如何使用oracle查询,oracle 表查询
  4. 如何解决90%的报表设计难题?300张报表模板任君挑选
  5. kotlin 初始化数组
  6. 面向对象进阶(二)----------类的内置方法
  7. LateUpdate、Late、FixedUpdate的意义
  8. WPF/MVVM 快速开发
  9. 搞定WordPress的日志自动截断
  10. IdentityServer4密码模式