Apollo配置中心的实战
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网速不给力的话,可以从百度网盘下载。
- 从Github下载
- checkout或下载apollo-build-scripts项目
- 由于Quick Start项目比较大,所以放在了另外的repository,请注意项目地址
- 从百度网盘下载
- 通过网盘链接下载(提取码: deca)
- 下载到本地后,在本地解压apollo-quick-start.zip
- 为啥安装包要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
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>1.0.</version>
</dependency>
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-core</artifactId>
<version>1.0.</version>
</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
项目中为
app.id=TestApp
3、设置注册中心metaService的地址
我们在demo.sh中我们可看到下面的地址信息
# meta server url
config_server_url=http://localhost:8080
admin_server_url=http://localhost:8090
eureka_service_url=$config_server_url/eureka/
portal_url=http://localhost:8070
那么这里
apollo-env.properties的内容如下:
local.meta=http://localhost:8080
dev.meta=http://localhost:8080
fat.meta=${fat_meta}
uat.meta=${uat_meta}
lpt.meta=${lpt_meta}
pro.meta=${pro_meta}
接下来就是对于的pom.xml的依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.</modelVersion>
<groupId>com.itmayiedu</groupId>
<artifactId>springboot-abl</artifactId>
<version>0.0.-SNAPSHOT</version> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0..RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent> <properties>
<project.build.sourceEncoding>UTF-</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.RC1</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- <exclusions> <exclusion> <groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId> </exclusion> </exclusions> -->
</dependency> <!-- apollo 携程apollo配置中心框架 -->
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>1.0.</version>
</dependency>
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-core</artifactId>
<version>1.0.</version>
</dependency> <dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies> <dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.</version>
<executions>
<execution>
<id>copy-conf</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<encoding>UTF-</encoding>
<outputDirectory>${project.build.directory}/ext/conf</outputDirectory>
<resources>
<resource>
<directory>ext/conf</directory>
<includes>
<include>logback.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.5.201505241946</version>
<executions>
<execution>
<id>default-prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>default-prepare-agent-integration</id>
<goals>
<goal>prepare-agent-integration</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.</version>
<configuration>
<imageName>hy_uav_gateway</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
<include>ext/conf/logback.xml</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build> <repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</project>
需要引入上面我们的apollo-core和apollo-core的依赖
接下来就是启动类的代码,需要开启@EnableApolloConfig的注解,
1.在微服务应用启动中使用apollo配置中心获取配置信息
打开应用对应的启动类Application,在启动类上加上如下注解:@EnableApolloConfig
App.java
/**
* 功能说明:
* 功能作者:
* 创建日期:
* 版权归属:每特教育|蚂蚁课堂所有 www.itmayiedu.com
*/
package com.itmayiedu.api.controller; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig; /**
* 功能说明: <br>
* 创建作者:每特教育-余胜军<br>
* 创建时间:2018年8月28日 下午9:09:14<br>
* 教育机构:每特教育|蚂蚁课堂<br>
* 版权说明:上海每特教育科技有限公司版权所有<br>
* 官方网站:www.itmayiedu.com|www.meitedu.com<br>
* 联系方式:qq644064779<br>
* 注意:本内容有每特教育学员共同研发,请尊重原创版权
*/
@EnableApolloConfig
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
} }
应用中获取配置信息的几种方式 ,通过@value注解获取配置值
IndexController.java
/**
* 功能说明:
* 功能作者:
* 创建日期:
* 版权归属:每特教育|蚂蚁课堂所有 www.itmayiedu.com
*/
package com.itmayiedu.api.controller; import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; /**
* 功能说明: <br>
* 创建作者:每特教育-余胜军<br>
* 创建时间:2018年8月28日 下午9:07:25<br>
* 教育机构:每特教育|蚂蚁课堂<br>
* 版权说明:上海每特教育科技有限公司版权所有<br>
* 官方网站:www.itmayiedu.com|www.meitedu.com<br>
* 联系方式:qq644064779<br>
* 注意:本内容有每特教育学员共同研发,请尊重原创版权
*/
@RestController
public class IndexController { @Value("${yushengjun:test}")
private String yushengjun; @RequestMapping("/getYushengjun")
public String getYushengjun() {
return yushengjun;
} }
@Value("${yushengjun:test}"),在apollo中发布key为hengjun的值,在客户端访问的时候,就可以获得改值,这里test是默认值
默认情况下获得是默认的application的namespace的值,可以在@EnableApolloConfig指定对于的namespance
@EnableApolloConfig("FX.Hermes.Producer")
Apollo配置中心的实战的更多相关文章
- kubernetes实战-配置中心(四)分环境使用apollo配置中心
要进行分环境,需要将现有实验环境进行拆分 portal服务,可以各个环境共用,但是apollo-adminservice和apollo-configservice必须要分开. 1.zk环境拆分为tes ...
- (转)实验文档3:在kubernetes集群里集成Apollo配置中心
使用ConfigMap管理应用配置 拆分环境 主机名 角色 ip HDSS7-11.host.com zk1.od.com(Test环境) 10.4.7.11 HDSS7-12.host.com zk ...
- k8s-2-集成apollo配置中心
主题: 在k8s中集成Apollo配置中心 架构图 一.配置中心概述 配置的几种方式 本课讲得是基于配置中心数据库实现 配置管理的现状 常见的配置中心 主讲:k8s configmap,apollo ...
- Apollo配置中心动态刷新日志级别
Apollo配置中心动态刷新日志级别 添加次配置后,当在apollo上面调整日志级别不需要重启服务器,马上就能生效 /** * 结合apollo动态刷新日志级别 * @author: nj * @da ...
- 基于winserver的Apollo配置中心分布式&集群部署实践(正确部署姿势)
基于winserver的Apollo配置中心分布式&集群部署实践(正确部署姿势) 前言 前几天对Apollo配置中心的demo进行一个部署试用,现公司已决定使用,这两天进行分布式部署的时候 ...
- Apollo配置中心
背景: 当前我们项目,所有的配置基本都是通过本地properties 文件进行配置的,比如ip地址.端口.消息中间件和数据库连接的各种参数,当我们需要切换环境或调整参数的时候,我们必须手动的修改这些配 ...
- apollo配置中心初探
近在搞微服务框架的开发,需要有一个配置中心来满足统一管理业务应用以及组件的配置,在此期间也使用了多个配置中心比如:spring cloud config,自研的配置中心,当然还有apollo. spr ...
- spring boot2.1读取 apollo 配置中心1
第一篇:搭建apollo配置中心 为什么选择apollo,我做了一些对比: Diamond Disconf Apollo Spring Cloud Config 数据持久性 mysql mysql ...
- Apollo配置中心转
尊重原创,本文转自:https://www.cnblogs.com/FlyAway2013/p/8811385.html 前我们项目,所有的配置基本都是通过本地properties 文件进行配置的,比 ...
随机推荐
- [工具-001]C++更换EXE的ICON图标
我们都知道每个可执行文件EXE都会有自己的图标,它可以在项目生成的时候进行指认,但是有时候我们会遇到两种情况:1.没有源代码,2.我们的项目很多,一个个进行更换很耗时.本人就是因为接到这么一个需求,要 ...
- CentOS8的网络管理变化
资料来源: https://www.cnblogs.com/linuxandy/p/10839856.html 1.CentOS8使用NetworkManager.service(简称NM)来管理网络 ...
- Rocket - tilelink - FIFOFixer
https://mp.weixin.qq.com/s/JS4Pguwa6LXjPsMq6nW8HA 简单介绍FIFOFixer的实现. 1. 基本介绍 按照一定的策略把某一部分m ...
- 集合遍历元素的3种方法:for、foreach、迭代器iterator
1.for循环方式(Set集合不能使用,因为Set是无序的没有索引) for (int i = 0; i < list.size(); i++) { Object o = list.get(i) ...
- Spring AOP学习笔记01:AOP概述
1. AOP概述 软件开发一直在寻求更加高效.更易维护甚至更易扩展的方式.为了提高开发效率,我们对开发使用的语言进行抽象,走过了从汇编时代到现在各种高级语言繁盛之时期:为了便于维护和扩展,我们对某些相 ...
- 使用turtle库画太极图
from turtle import * pensize(3) penup() pencolor("black") reset() speed(10) pendown() circ ...
- Java实现 蓝桥杯 算法训练 求和求平均值
试题 算法训练 求和求平均值 问题描述 从键盘输入10个浮点数,求出它们的和以及平均值,要求用函数实现 输入格式 测试数据的输入一定会满足的格式. 1 10 (1行10列的向量) 输出格式 要求用户的 ...
- Java实现 蓝桥杯VIP 算法提高 研究兔子的土豪
试题 算法提高 研究兔子的土豪 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 某天,HWD老师开始研究兔子,因为他是个土豪 ,所以他居然一下子买了一个可以容纳10^18代兔子的巨大 ...
- Java实现 LeetCode 445 两数相加 II
445. 两数相加 II 给定两个非空链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储单个数字.将这两数相加会返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会 ...
- Java实现 蓝桥杯VIP 算法训练 最长字符串
题目描述 字符串可是比赛经常出的问题,那么给大家出一个题, 输入五个字符串,输出5个字符串当中最长的字符串.每个字符串长度在100以内,且全为小写字母. 输入 无 输出 无 样例输入 one two ...