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

<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配置中心的实战的更多相关文章

  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. [工具-001]C++更换EXE的ICON图标

    我们都知道每个可执行文件EXE都会有自己的图标,它可以在项目生成的时候进行指认,但是有时候我们会遇到两种情况:1.没有源代码,2.我们的项目很多,一个个进行更换很耗时.本人就是因为接到这么一个需求,要 ...

  2. CentOS8的网络管理变化

    资料来源: https://www.cnblogs.com/linuxandy/p/10839856.html 1.CentOS8使用NetworkManager.service(简称NM)来管理网络 ...

  3. Rocket - tilelink - FIFOFixer

    https://mp.weixin.qq.com/s/JS4Pguwa6LXjPsMq6nW8HA   简单介绍FIFOFixer的实现.   ​​   1. 基本介绍   按照一定的策略把某一部分m ...

  4. 集合遍历元素的3种方法:for、foreach、迭代器iterator

    1.for循环方式(Set集合不能使用,因为Set是无序的没有索引) for (int i = 0; i < list.size(); i++) { Object o = list.get(i) ...

  5. Spring AOP学习笔记01:AOP概述

    1. AOP概述 软件开发一直在寻求更加高效.更易维护甚至更易扩展的方式.为了提高开发效率,我们对开发使用的语言进行抽象,走过了从汇编时代到现在各种高级语言繁盛之时期:为了便于维护和扩展,我们对某些相 ...

  6. 使用turtle库画太极图

    from turtle import * pensize(3) penup() pencolor("black") reset() speed(10) pendown() circ ...

  7. Java实现 蓝桥杯 算法训练 求和求平均值

    试题 算法训练 求和求平均值 问题描述 从键盘输入10个浮点数,求出它们的和以及平均值,要求用函数实现 输入格式 测试数据的输入一定会满足的格式. 1 10 (1行10列的向量) 输出格式 要求用户的 ...

  8. Java实现 蓝桥杯VIP 算法提高 研究兔子的土豪

    试题 算法提高 研究兔子的土豪 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 某天,HWD老师开始研究兔子,因为他是个土豪 ,所以他居然一下子买了一个可以容纳10^18代兔子的巨大 ...

  9. Java实现 LeetCode 445 两数相加 II

    445. 两数相加 II 给定两个非空链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储单个数字.将这两数相加会返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会 ...

  10. Java实现 蓝桥杯VIP 算法训练 最长字符串

    题目描述 字符串可是比赛经常出的问题,那么给大家出一个题, 输入五个字符串,输出5个字符串当中最长的字符串.每个字符串长度在100以内,且全为小写字母. 输入 无 输出 无 样例输入 one two ...