31.携程 Apollo 配置中心介绍~1.mp4

32.Apollo核心概念~1.mp4

32.Apollo核心概念~1.mp4

每个应用需要有一个唯一的AppID

要在指定的机器上的server.properties上面指定当前机器是dev类型还是其他类型

在apollo中配置kafka的地址,东区生成环境和西区生产环境是不一样的

应用A可以访问到应用B中公共类型的数据,公共类型的数据中k4的值是v5,应用A可以自己定义覆盖k4的值变成v6,应用A中的私有类型的数据只能应用A本身访问,其他应用无法访问,对于公共的数据类型对于的key的命名在apollo中必须全局唯一

某个环境下的某个应用下的某个集群下的某个命名空间下的某个key,

私有配置项:当前的env环境加上应用名称加上集群加上命名空间加上item的名称组成

apollo的编辑权限和发布权限是分开的

2、apollo后端架构的设计

apollo后端一共存在6大模块,如下所示

注1:portal也是apollo的客户端,通过meta server注册中心获得admin service的服务列表

注2:apollo client 也是通过meta server获得config service服务的列表

Meta server 做集群的时候要配置多台,client中要配置meta server 集群的地址,client具体访问那台meta server来获得admin service的地址,也是通过负载均衡来实现的,公司内部已经提供了nginx LB来帮我们实现client访问meta server的集群

同理portal也是通过meta service来获得admin service的地址

Client通过meta service拿到admin service的地址之后,也是通过ribbon软负载的形式去调用具体的某台admin service

注3:

我们来看实时消息推送是如何实现的

管理员通过portal操作admin service 发布一条配置项之后,会将变更的数据插入到数据库表releaseMessage表中,因为config service 和admin service共享同一个数据库,config service会定期的描述releaseMessage表,如果发现了配置项发现了变化,config service会立即通知客户端

4、apollo客户端的设计

Config service和apollo客户端是配置是实时推送到客户端的

如果推送失败,apollo客户端还会定期的从config service中拉取配置

Apoll客户端获得最新的配置之后首先存储在内存缓存中,通过会通过回调机制会立刻通知到集成了apollo客户端的应用程序

同时apollo客户端会将内存中的缓存通报到本地的文件缓存中,当apollo客户端如果连接不上config service,会读取本地文件缓存的配置,保证可用性,后期在尝试去连接config service

5、apollo的高可用

这里如果config service和admin service 对于的数据库挂了,这个时候是无法进行配置的操作到数据库的。Configservicie虽然无法连接到数据库,但是config service提供了缓存功能,apollo客户端也可以访问到cinfig service的缓存数据

33.Apollo快速起步(Lab01)~1.mp4

如何在本地环境上如何快速安装apollo

mysql要求5.6.5

.3 下载Quick Start安装包

我们准备好了一个Quick Start安装包,大家只需要下载到本地,就可以直接使用,免去了编译、打包过程。

安装包共50M,如果访问github网速不给力的话,可以从百度网盘下载。

  1. 从Github下载

  2. 从百度网盘下载
    • 通过网盘链接下载(提取码: deca)
    • 下载到本地后,在本地解压apollo-quick-start.zip
  3. 为啥安装包要58M这么大?
    • 因为这是一个可以自启动的jar包,里面包含了所有依赖jar包以及一个内置的tomcat容
    • 这里直接从网盘连接进行下载所需的东

接下来需要安装apollo对于的数据库

下载完成之后解压之后的内容如下所示:

接下来,需要设置数据库环境,数据库的代码在

这里我们本地数据库进行初始化

这里会产生apollo的两个数据库的表文件

接下来,需要在数据库中配置对于的数据库脚本

现在修改demo.sh,在里面添加上对于的配置

接下来启动apollo

这里在windows上我们要使用linux的环境,我们需要安装git  bash

这样apollo就启动起来了我们创建一个用户,创建一个账号

在浏览器输入:http://localhost:8070/user-manage.html,必须使用超级管理员apollo用户登录

创建一个bobo的账号

我们使用bobo账号登录,然后创建项目

点击新建配置,我们创建一个timeout的配置

创建之后,要进行发布操作

我们要验证我们发布的东西,如何进行验证了

我们要修改下apollo-quick-start中国的client配置,将配置文件的appID修改为我们上面创建的TestAPP

启动客户端的代码如下

阿波罗架构的模块

portal需要连接admi service,通过Meta Server去获得admin services的列表

一般情况下config service 和admin service都会做集群,部署多份,client如何获得config  service的服务列表了,这就需要引入微服务的注册中心,引入了eruka

但是euraka的客户端只支持java客户端,如果需要eruka的c 语言端,这就需要引入metaservice,这个metaservice是对euruka客户端的封装,支持其他语言,用户服务的注册和发现

接下来,client访问confi service集群还需要引入负载均衡,portal访问admin service也需要引入负载均衡集群

apollo客户端配置中心的使用

配置中心有文件变动之后会实时的推送给apollo的客户端,如果存在网络等问题,客户端没有收到推送的东西,客户端也会定时的从配置中心取数据。

客户端拿到最新的数据的时候首先是缓存到内存中,客户端首先新的数据的时候也会实时的通知应用程序,内存中的数据也会同步到本地缓存文件,当客户端连接不上配置中心的时候,会使用本地

文件缓存,如果没有本地缓存文件,客户端连接不上配置中心,就会报错。读取完本地文件缓存之后,客户端后续也会主动尝试连接配置中心,从配置中心获取最新的数据

页面上点击发布的时候,就是通过长连接将最新数据推送给apollo的客户端

config service 挂了一台不影响。因为client是通过负载均衡访问config service的,即使config service全部挂了,client客户端可以读取本地缓存文件,也不影响

admin service 挂了一台不影响。因为portal是通过负载均衡访问config service的,即使admin service全部挂了,效果就是portal无法操作配置文件,问题不大

portal挂了一台,用户通过nginx可以访问其他portal,如果portal全部挂了。后果就是用户不能更新配置

configdb挂了,configservice会开启缓存功能,client客户端读取数据不受影响,但是不能对配置进行修改操作,用户也无法通过adminService修改配置数据

portal db挂了,用户也是无法通过portaldb读取数据

除了cat监控监控之外,特别是生产上还需要引入时间序列数据库例如上面的普罗米修斯、 influxDB,列如统计apollo接入了多少应用、有多少配置项、多次变更。推送拉取次数、成功失败次数,如果仅仅

使用cat的话,力度还是不够,需要普罗米修斯等工具监控apollo数据库、获得对业务代码进行埋点获得更精确的统计

服务器至少1.8版本,数据库至少5.6.5版本以上

portal只需要部署一份,管理dev fat等环境只部署一套

metaService adminservice  configservice每个环境例如dev fat都要独立部署一份

metaservice和configservice在同一台服务器的一个jvm中,adminservice在另外一个jvm中

部署的数据configdb和portaldb都要配置好,configdb在dev fat环境上都独立部署,portdb在各个环境上只需要一份,portdb中要修改数据库支持哪些dev fat的环境

portdb中要配置有哪些部门,管理员等信息

configservice要连接注册中心,需要在configdb中配置注册中心的url

portal也是通过注册中心去获得adminService的地址,portal中也要配置注册中心的地址,这里注册中心的地址部署保存在数据库中的,而是port打包中应用程序就设置好的,打包portal的时候需要设置

号dev、fat等环境的注册中心的url

39.Apollo Java客户端和多语言接入~1.mp4

客户端接入的时候需要在app.properties中设置当前应用的唯一ID

推荐做法,在apollo-core.jar中就设置好注册中心的地址,客户端直接引入改jar就可以了,不用重新设置注册中心的环境,如果要重载,可以在classpath中单独设置一份app-env.properties,

在里面进行设置

设置当前用户在哪个环境是dev、还是FAT等

apollo客户端就有本地缓存文件,也需要进行配置

apollo-client客户端在maven仓库上是没有的,因为client中会包括不同的注册中心metaserice的地址,每个项目是不一样的,建议参考部署指南,项目组内部自己构建一个jar包,传递到自己项目的私服上

https://m.jb51.net/article/167565.htm

40.Apollo Client API实操(Lab02)~1.mp4

虚拟机内存要2G以上,apollo启动都要占用1个duoG

其次mysql一定要5.7版本

三、整合Springboot

  1. <dependency>
  2. <groupId>com.ctrip.framework.apollo</groupId>
  3. <artifactId>apollo-client</artifactId>
  4. <version>1.0.</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>com.ctrip.framework.apollo</groupId>
  8. <artifactId>apollo-core</artifactId>
  9. <version>1.0.</version>
  10. </dependency>

这里在官网上面没有正式的上面的maven的依赖

这里引入的jar下载下来好像不可以使用。需要我们手动下载Apollo然后编译导入Maven仓库
1、先删除Maven仓库已有的apollo jar
2、apollo-master\scripts

下载apollo-master的源码,进入到源码的下面目录,windows下执行build.bat就可以把对于的jar包,打包到本地的电脑的maven仓库中

安装成功之后在本地的maven仓库就可以看到下面的信息了

接下来我们创建一个springboot的项目

当前快速启动的项目apollo-quick-start默认提供的dev环境,因此需要将我们当前的环境设置为dev,当前是windows的开发环境

对于Windows,文件位置为C:\opt\settings\server.properties
目前,env支持以下几个值(大小写不敏感):
DEV, FAT, UAT, PRO

2 设置Appid

确保classpath:/META-INF/app.properties文件存在,并且其中内容形如:app.id=YOUR-APP-ID

项目中为

  1. app.id=TestApp

3、设置注册中心metaService的地址

我们在demo.sh中我们可看到下面的地址信息

  1. # meta server url
  2. config_server_url=http://localhost:8080
  3. admin_server_url=http://localhost:8090
  4. eureka_service_url=$config_server_url/eureka/
  5. portal_url=http://localhost:8070

那么这里

apollo-env.properties的内容如下:

  1. local.meta=http://localhost:8080
  2. dev.meta=http://localhost:8080
  3. fat.meta=${fat_meta}
  4. uat.meta=${uat_meta}
  5. lpt.meta=${lpt_meta}
  6. pro.meta=${pro_meta}

接下来就是对于的pom.xml的依赖

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.</modelVersion>
  4. <groupId>com.itmayiedu</groupId>
  5. <artifactId>springboot-abl</artifactId>
  6. <version>0.0.-SNAPSHOT</version>
  7.  
  8. <parent>
  9. <groupId>org.springframework.boot</groupId>
  10. <artifactId>spring-boot-starter-parent</artifactId>
  11. <version>2.0..RELEASE</version>
  12. <relativePath /> <!-- lookup parent from repository -->
  13. </parent>
  14.  
  15. <properties>
  16. <project.build.sourceEncoding>UTF-</project.build.sourceEncoding>
  17. <project.reporting.outputEncoding>UTF-</project.reporting.outputEncoding>
  18. <java.version>1.8</java.version>
  19. <spring-cloud.version>Finchley.RC1</spring-cloud.version>
  20. </properties>
  21. <dependencies>
  22. <dependency>
  23. <groupId>org.springframework.boot</groupId>
  24. <artifactId>spring-boot-starter</artifactId>
  25. </dependency>
  26. <dependency>
  27. <groupId>org.springframework.cloud</groupId>
  28. <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  29. </dependency>
  30. <dependency>
  31. <groupId>org.springframework.boot</groupId>
  32. <artifactId>spring-boot-starter-web</artifactId>
  33. <!-- <exclusions> <exclusion> <groupId>com.fasterxml.jackson.core</groupId>
  34. <artifactId>jackson-databind</artifactId> </exclusion> </exclusions> -->
  35. </dependency>
  36.  
  37. <!-- apollo 携程apollo配置中心框架 -->
  38. <dependency>
  39. <groupId>com.ctrip.framework.apollo</groupId>
  40. <artifactId>apollo-client</artifactId>
  41. <version>1.0.</version>
  42. </dependency>
  43. <dependency>
  44. <groupId>com.ctrip.framework.apollo</groupId>
  45. <artifactId>apollo-core</artifactId>
  46. <version>1.0.</version>
  47. </dependency>
  48.  
  49. <dependency>
  50. <groupId>org.projectlombok</groupId>
  51. <artifactId>lombok</artifactId>
  52. <optional>true</optional>
  53. </dependency>
  54. <dependency>
  55. <groupId>com.alibaba</groupId>
  56. <artifactId>fastjson</artifactId>
  57. <version>1.2.</version>
  58. </dependency>
  59. <dependency>
  60. <groupId>org.springframework.boot</groupId>
  61. <artifactId>spring-boot-starter-test</artifactId>
  62. <scope>test</scope>
  63. </dependency>
  64. </dependencies>
  65.  
  66. <dependencyManagement>
  67. <dependencies>
  68. <dependency>
  69. <groupId>org.springframework.cloud</groupId>
  70. <artifactId>spring-cloud-dependencies</artifactId>
  71. <version>${spring-cloud.version}</version>
  72. <type>pom</type>
  73. <scope>import</scope>
  74. </dependency>
  75. </dependencies>
  76. </dependencyManagement>
  77.  
  78. <build>
  79. <plugins>
  80. <plugin>
  81. <groupId>org.springframework.boot</groupId>
  82. <artifactId>spring-boot-maven-plugin</artifactId>
  83. </plugin>
  84. <plugin>
  85. <groupId>org.apache.maven.plugins</groupId>
  86. <artifactId>maven-compiler-plugin</artifactId>
  87. <configuration>
  88. <source>1.8</source>
  89. <target>1.8</target>
  90. </configuration>
  91. </plugin>
  92. <plugin>
  93. <groupId>org.apache.maven.plugins</groupId>
  94. <artifactId>maven-resources-plugin</artifactId>
  95. <version>3.0.</version>
  96. <executions>
  97. <execution>
  98. <id>copy-conf</id>
  99. <phase>package</phase>
  100. <goals>
  101. <goal>copy-resources</goal>
  102. </goals>
  103. <configuration>
  104. <encoding>UTF-</encoding>
  105. <outputDirectory>${project.build.directory}/ext/conf</outputDirectory>
  106. <resources>
  107. <resource>
  108. <directory>ext/conf</directory>
  109. <includes>
  110. <include>logback.xml</include>
  111. </includes>
  112. <filtering>true</filtering>
  113. </resource>
  114. </resources>
  115. </configuration>
  116. </execution>
  117. </executions>
  118. </plugin>
  119. <plugin>
  120. <groupId>org.jacoco</groupId>
  121. <artifactId>jacoco-maven-plugin</artifactId>
  122. <version>0.7.5.201505241946</version>
  123. <executions>
  124. <execution>
  125. <id>default-prepare-agent</id>
  126. <goals>
  127. <goal>prepare-agent</goal>
  128. </goals>
  129. </execution>
  130. <execution>
  131. <id>default-prepare-agent-integration</id>
  132. <goals>
  133. <goal>prepare-agent-integration</goal>
  134. </goals>
  135. </execution>
  136. </executions>
  137. </plugin>
  138. <plugin>
  139. <groupId>com.spotify</groupId>
  140. <artifactId>docker-maven-plugin</artifactId>
  141. <version>0.4.</version>
  142. <configuration>
  143. <imageName>hy_uav_gateway</imageName>
  144. <dockerDirectory>src/main/docker</dockerDirectory>
  145. <resources>
  146. <resource>
  147. <targetPath>/</targetPath>
  148. <directory>${project.build.directory}</directory>
  149. <include>${project.build.finalName}.jar</include>
  150. <include>ext/conf/logback.xml</include>
  151. </resource>
  152. </resources>
  153. </configuration>
  154. </plugin>
  155. </plugins>
  156. </build>
  157.  
  158. <repositories>
  159. <repository>
  160. <id>spring-milestones</id>
  161. <name>Spring Milestones</name>
  162. <url>https://repo.spring.io/milestone</url>
  163. <snapshots>
  164. <enabled>false</enabled>
  165. </snapshots>
  166. </repository>
  167. </repositories>
  168. </project>

需要引入上面我们的apollo-core和apollo-core的依赖

接下来就是启动类的代码,需要开启@EnableApolloConfig的注解,

1.在微服务应用启动中使用apollo配置中心获取配置信息
打开应用对应的启动类Application,在启动类上加上如下注解:@EnableApolloConfig

App.java

  1. /**
  2. * 功能说明:
  3. * 功能作者:
  4. * 创建日期:
  5. * 版权归属:每特教育|蚂蚁课堂所有 www.itmayiedu.com
  6. */
  7. package com.itmayiedu.api.controller;
  8.  
  9. import org.springframework.boot.SpringApplication;
  10. import org.springframework.boot.autoconfigure.SpringBootApplication;
  11.  
  12. import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig;
  13.  
  14. /**
  15. * 功能说明: <br>
  16. * 创建作者:每特教育-余胜军<br>
  17. * 创建时间:2018年8月28日 下午9:09:14<br>
  18. * 教育机构:每特教育|蚂蚁课堂<br>
  19. * 版权说明:上海每特教育科技有限公司版权所有<br>
  20. * 官方网站:www.itmayiedu.com|www.meitedu.com<br>
  21. * 联系方式:qq644064779<br>
  22. * 注意:本内容有每特教育学员共同研发,请尊重原创版权
  23. */
  24. @EnableApolloConfig
  25. @SpringBootApplication
  26. public class App {
  27. public static void main(String[] args) {
  28. SpringApplication.run(App.class, args);
  29. }
  30.  
  31. }

应用中获取配置信息的几种方式 ,通过@value注解获取配置值

IndexController.java

  1. /**
  2. * 功能说明:
  3. * 功能作者:
  4. * 创建日期:
  5. * 版权归属:每特教育|蚂蚁课堂所有 www.itmayiedu.com
  6. */
  7. package com.itmayiedu.api.controller;
  8.  
  9. import org.springframework.beans.factory.annotation.Value;
  10. import org.springframework.web.bind.annotation.RequestMapping;
  11. import org.springframework.web.bind.annotation.RestController;
  12.  
  13. /**
  14. * 功能说明: <br>
  15. * 创建作者:每特教育-余胜军<br>
  16. * 创建时间:2018年8月28日 下午9:07:25<br>
  17. * 教育机构:每特教育|蚂蚁课堂<br>
  18. * 版权说明:上海每特教育科技有限公司版权所有<br>
  19. * 官方网站:www.itmayiedu.com|www.meitedu.com<br>
  20. * 联系方式:qq644064779<br>
  21. * 注意:本内容有每特教育学员共同研发,请尊重原创版权
  22. */
  23. @RestController
  24. public class IndexController {
  25.  
  26. @Value("${yushengjun:test}")
  27. private String yushengjun;
  28.  
  29. @RequestMapping("/getYushengjun")
  30. public String getYushengjun() {
  31. return yushengjun;
  32. }
  33.  
  34. }

@Value("${yushengjun:test}"),在apollo中发布key为hengjun的值,在客户端访问的时候,就可以获得改值,这里test是默认值

默认情况下获得是默认的application的namespace的值,可以在@EnableApolloConfig指定对于的namespance

@EnableApolloConfig("FX.Hermes.Producer")

Apollo配置中心的实战的更多相关文章

  1. kubernetes实战-配置中心(四)分环境使用apollo配置中心

    要进行分环境,需要将现有实验环境进行拆分 portal服务,可以各个环境共用,但是apollo-adminservice和apollo-configservice必须要分开. 1.zk环境拆分为tes ...

  2. (转)实验文档3:在kubernetes集群里集成Apollo配置中心

    使用ConfigMap管理应用配置 拆分环境 主机名 角色 ip HDSS7-11.host.com zk1.od.com(Test环境) 10.4.7.11 HDSS7-12.host.com zk ...

  3. k8s-2-集成apollo配置中心

    主题: 在k8s中集成Apollo配置中心 架构图 一.配置中心概述 配置的几种方式 本课讲得是基于配置中心数据库实现 配置管理的现状 常见的配置中心 主讲:k8s configmap,apollo ...

  4. Apollo配置中心动态刷新日志级别

    Apollo配置中心动态刷新日志级别 添加次配置后,当在apollo上面调整日志级别不需要重启服务器,马上就能生效 /** * 结合apollo动态刷新日志级别 * @author: nj * @da ...

  5. 基于winserver的Apollo配置中心分布式&集群部署实践(正确部署姿势)

    基于winserver的Apollo配置中心分布式&集群部署实践(正确部署姿势)   前言 前几天对Apollo配置中心的demo进行一个部署试用,现公司已决定使用,这两天进行分布式部署的时候 ...

  6. Apollo配置中心

    背景: 当前我们项目,所有的配置基本都是通过本地properties 文件进行配置的,比如ip地址.端口.消息中间件和数据库连接的各种参数,当我们需要切换环境或调整参数的时候,我们必须手动的修改这些配 ...

  7. apollo配置中心初探

    近在搞微服务框架的开发,需要有一个配置中心来满足统一管理业务应用以及组件的配置,在此期间也使用了多个配置中心比如:spring cloud config,自研的配置中心,当然还有apollo. spr ...

  8. spring boot2.1读取 apollo 配置中心1

    第一篇:搭建apollo配置中心 为什么选择apollo,我做了一些对比:   Diamond Disconf Apollo Spring Cloud Config 数据持久性 mysql mysql ...

  9. Apollo配置中心转

    尊重原创,本文转自:https://www.cnblogs.com/FlyAway2013/p/8811385.html 前我们项目,所有的配置基本都是通过本地properties 文件进行配置的,比 ...

随机推荐

  1. JS代码静态分析及挖掘

    JavaScript 已经成为现代 Web 浏览器开发中最普遍的技术之一.使用客户端 JavaScript 框架(如 AngularJS,ReactJS 和 Vue.js)构建的应用程序已向前端输送了 ...

  2. flex布局以及常用属性。

    (1)flex布局排列 会消除块状属性,所有与块状相关的属性将失效,比如块状元素会独占一行,如图2,设置flex后会在一行排列

  3. SpringSecurity(1)---认证+授权代码实现

    认证+授权代码实现 Spring Security是 一种基于 Spring AOP 和 Servlet 过滤器的安全框架.它提供全面的安全性解决方案,同时在 Web 请求级和方法调用级处理身份确认和 ...

  4. 分布式事务专题笔记(一) 基础概念 与 CAP 理论

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.基础概念 1.什么是事务 什么是事务?举个生活中的例子:你去小卖铺买东西,“一手交钱,一手交货”就是 ...

  5. Java实现 蓝桥杯VIP 算法提高 陶陶摘苹果2

    算法提高 陶陶摘苹果2 时间限制:1.0s 内存限制:256.0MB 问题描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出n个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个30厘米高的板凳, ...

  6. Java实现最大连续子数组和

    1 问题描述 给定一个整数数组,数组里可能有正数.负数和零.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值.例如,如果输入的数组为{1,-2,3,10,-4, ...

  7. java实现算年龄

    英国数学家德摩根出生于19世纪初叶(即18xx年). 他年少时便很有才华.一次有人问他的年龄,他回答说: "到了x的平方那年,我刚好是x岁". 请你计算一下,德摩根到底出生在哪一年 ...

  8. leetcode之两数相加解题思路

    问题描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组中同一个元素不能使 ...

  9. 使用 UniApp 实现小程序的微信登录

    微信登录思路: 在main.js 中封装公共函数,用于判断用户是否登录 在main.js 中分定义全局变量,用于存储接口地址 如果没有登录.则跳转至登录页面 进入登录页面 通过 wx.login 获取 ...

  10. eclipse中testNG的两种安装方式

    今天给大家带来两种关于testNG中的安装方式:1.在线安装(本人亲测有效!!!)2.离线安装 一.在线安装testNG插件的步骤: 1.给大家提供一个testNG在线的安装的地址:http://dl ...