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. [批处理教程之Git]001.Git 常用命令大全

    基本技巧 1.安装后的第一步 安装git后,第一件事你需要设置你的名字和邮箱,因为每次提交都需要这些信息. $ git config --global user.name "Some One ...

  2. 插入与读取Blob类型数据

    BlobTest package com.aff.PreparedStatement; import java.io.File; import java.io.FileInputStream; imp ...

  3. MongoDB启动和关闭问题

    1.当我们使用离线安装mongodb完成后, 推荐安装教程: http://dblab.xmu.edu.cn/blog/868-2/#more-868 在使用 ' mongod -f XXX/mong ...

  4. Alpha冲刺——4.30

    这个作业属于哪个课程 软件工程 这个作业要求在哪里 团队作业第五次--Alpha冲刺 这个作业的目标 Alpha冲刺 作业正文 正文 github链接 项目地址 其他参考文献 无 一.会议内容 1.规 ...

  5. Java实现 LeetCode 617 合并二叉树(遍历树)

    617. 合并二叉树 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠. 你需要将他们合并为一个新的二叉树.合并的规则是如果两个节点重叠,那么将他们的值相加作为节点 ...

  6. Java实现 LeetCode 407 接雨水 II(二)

    407. 接雨水 II 给定一个 m x n 的矩阵,其中的值均为正整数,代表二维高度图每个单元的高度,请计算图中形状最多能接多少体积的雨水. 说明: m 和 n 都是小于110的整数.每一个单位的高 ...

  7. Java实现 LeetCode 151 翻转字符串里的单词

    151. 翻转字符串里的单词 给定一个字符串,逐个翻转字符串中的每个单词. 示例 1: 输入: "the sky is blue" 输出: "blue is sky th ...

  8. CSS清除浮动&内容居中&文字溢出

    学习! 1.CSS清除浮动的方法 (1)添加标签清除浮动: 在浮动元素结尾处,并列的添加标签<div style="clear:both;"></div>. ...

  9. 常见ie9兼容问题

    公司项目要求需要兼容ie9,开发过程中遇到了许多问题,在这里记录一下,希望可以帮到其他需要的小伙伴. 浏览器兼容性问题无外乎三点,css样式兼容.JavaScript兼容及h5部分标签的兼容.主要介绍 ...

  10. Openshift 4.4 静态 IP 离线安装系列:准备离线资源

    本系列文章描述了离线环境下以 UPI (User Provisioned Infrastructure) 模式安装 Openshift Container Platform (OCP) 4.4.5 的 ...