一、开场白

在系统设计里我们有很多配置希望独立于系统之外,而又能够被系统实时读取。但是在传统的系统设计里,配置信息通常是耦合在系统内的,比如.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.xxhostname: ${hostname:47.99.92.76}preferIpAddress: truestatus-page-url-path: /infohealth-check-url-path: /healthclient:serviceUrl:# This setting will be overridden by eureka.service.url setting from ApolloConfigDB.ServerConfig or System Property# see com.ctrip.framework.apollo.biz.eureka.ApolloEurekaClientConfigdefaultZone: http://${eureka.instance.hostname}:8080/eureka/
    healthcheck:enabled: trueeurekaServiceUrlPollIntervalSeconds: 60management: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 info
apollo_config_db_url=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8
apollo_config_db_username=xxx
apollo_config_db_password=xxx# apollo portal db info
apollo_portal_db_url=jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8
apollo_portal_db_username=xxx
apollo_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 ,执行以下命令编译源码:

./build.sh

该脚本会依次打包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 Core 商城微服务项目系列(十四):分布式部署携程Apollo构建配置中心相关推荐

  1. .Net Core 商城微服务项目系列(二):使用Ocelot + Consul构建具备服务注册和发现功能的网关...

    1.服务注册 在上一篇的鉴权和登录服务中分别通过NuGet引用Consul这个包,同时新增AppBuilderExtensions类: public static class AppBuilderEx ...

  2. .Net Core 商城微服务项目系列(一):使用IdentityServer4构建基础登录验证

    这里第一次搭建,所以IdentityServer端比较简单,后期再进行完善. 1.新建API项目MI.Service.Identity,NuGet引用IdentityServer4,添加类InMemo ...

  3. .Net Core 商城微服务项目系列(十二):使用k8s部署商城服务

    一.简介 本篇我们将会把商城的服务部署到k8s中,同时变化的还有以下两个地方: 1.不再使用Consul做服务的注册和发现,转而使用k8s-dns来实现. 2.不再使用Ocelot作为业务网关,使用T ...

  4. .Net Core 商城微服务项目系列(八):购物车

    最近加班有点多,一周五天,四天加班到11点+,心很累.原因是我当前在的这个组比较特殊,相当于业务的架构组,要为其它的开发组提供服务和监控.所以最近更新的也少,不过这个元旦三天假应该会更新三篇. 这篇是 ...

  5. .Net Core with 微服务 - 可靠消息最终一致性分布式事务

    前面我们讲了分布式事务的2PC.3PCTCC 的原理.这些事务其实都在尽力的模拟数据库的事务,我们可以简单的认为他们是一个同步行的事务.特别是 2PC,3PC 他们完全利用数据库的事务能力,在一阶段开 ...

  6. .Net Core 微服务容器系列基础目录篇

    1.开场白 HI,各位老铁,大家端午好,之前写了些关于.net core商城系列的文章,有点乱,今天心血来潮想着整理一下(今天只是先把目录列出来,后面的每篇文章这两天会进行重新修改的,目前先将就看下) ...

  7. 微服务项目--商城管理系统的整合与测试

    一.微服务项目结构预览 1.商城微服务项目源码:https://github.com/shi469391tou/microservice-mallmanagement.git 项目源码 通过一个名为m ...

  8. .Net Core with 微服务 - 使用 AgileDT 快速实现基于可靠消息的分布式事务

    前面对于分布式事务也讲了好几篇了(可靠消息最终一致性分布式事务 - TCC分布式事务 - 2PC.3PC https://github.com/kklldog/AgileDT 开源不易,大家多多 ✨✨ ...

  9. 微服务项目部署在docker容器运行

    昨天的一篇微服务项目中涉及到docker部署,今天写一篇关于微服务项目部署在docker容器中运行,使用github上另外一个比较经典的微服务项目piggyMetric,项目的github地址:htt ...

最新文章

  1. JAVA Builder模式构建MAP/LIST的示例
  2. 关于4.8节第一个例子
  3. Intel Realsense D435 奇怪的现象记录:帧卡住,但wait_for_frame()不报错
  4. 认识5G——解开5G的神秘面纱
  5. python 流程控制if判断
  6. java 接口强制转换_三分钟学习Java泛型中T、E、K、V、?的含义
  7. python绘制折线图显示数据_漂亮图表也可用python信手拈来!一文教你学会用Python绘制堆积折线图...
  8. 计算机学院学生会宣传稿,计算机与信息工程学院学生会
  9. mysql建表注意事项,关键字和保留字不能作为表名
  10. 计算机在材料科学中的应用论文,计算机在材料科学中的应用论文.pdf
  11. springboot智慧幼儿园管理系统的设计与实现毕业设计源码271611
  12. App数据抓取(抓包工具使用)
  13. 2021谷歌年度AI技术总结 | Jeff Dean执笔万字展望人工智能的5大未来趋势!
  14. H5 直播的疯狂点赞动画是如何实现的?(附完整源码)
  15. 2021真无线耳机推荐,必须了解的真无线蓝牙耳机
  16. matlab图像进行变换
  17. 使用Python在Excel表指定位置插入多列并赋值
  18. 坐标反算c语言程序,测量坐标计算程序
  19. Java基础01 Java的安装和配置
  20. Android AccountManager帐号管理(一)

热门文章

  1. MySQLdb.cursors AttributeError: 'module' object has
  2. python二维向量运算模拟_Python数学基础之向量定义与向量运算(附代码)
  3. memcpy和strcpy函数
  4. python怎样画动态文字_Python制作动态字符图的实例
  5. KubeEdge 初测
  6. python去除视频中的logo_Python音视频开发:消除抖音短视频Logo和去电视台标的实现详解...
  7. 为什么我的modbus tcp server只能连一个client_TCP 协议概览
  8. 【linux】telnet ctrl+c 不退出问题解决
  9. 【java】Java 8 - 移除Permgen 使用元空间
  10. Netty实战项目:Spring boot 程序的聊天程序