基于Spring Cloud的Apollo配置中心
Springboot项目如何使用apollo配置中心
Springboot项目如何使用 apollo配置中心
这篇文章主要介绍了Springboot项目如何使用apollo配置中心,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有 一定的参考学习价值,需要的朋友可以参考下
1. 引入 apollo 配置依赖
<dependency> <groupId>com.ctrip.framework.apollo</groupId> <artifactId>apollo-client</artifactId> <version>1.1.0</version>
</dependency>
或者在配置文件中添加,让配置中心的配置生效
apollo.bootstrap.enabled=true
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
2. 在应用名添加 apollo 配置开启
@Enableent
-Dapp.id=YOUR-APP-ID -Denv=YOUR-ENVIRONMENT
4. 删除本地配置文件
application.properties/application.yml
阿波罗动态配置实现原理
阿波罗动态配置实现原理
阿波罗是一款开源的分布式配置中心,由携程框架部门开发。
它可以实现应用程序的动态配置管理,从而使得应用程序能够在运行时灵活地获取最新的配置信息。
阿波罗的实现原理主要包括以下几个方面:
1. 数据存储
阿波罗使用数据库来存储配置信息,它支持多种类型的数据库,包括MySQL、Oracle、SQL Server等。
在存储配置信息时,阿波罗会根据应用程序的不同需求,将配置信息按照不同的维度进行划分和管理,从而使得配置信息更加高效地被应用程序所使用。
2. 配置发布
阿波罗的配置发布具有灵活性和高效性,它可以根据配置变更的情况自动进行发布,从而使得应用程序可以及时获取最新的配置信息。
同时,阿波罗的配置发布还支持版本管理和回滚功能,可以保证配置信息的稳定性和可靠性。
3. 配置获取
阿波罗的配置获取可以通过多种方式实现,包括HTTP接口、Java API等。
应用程序可以根据自身的需求选择相应的获取方式。
在获取配置信息时,阿波罗还支持配置缓存和自动更新功能,可以提高应用程序的性能和可靠性。
4. 安全性
阿波罗的安全性是非常重要的,它对配置信息的存储、发布和获
取都进行了严格的安全策略控制,包括访问控制、数据加密等。
阿波罗还支持多种身份认证方式,包括用户名密码、OAuth2等,可以保证配置信息的安全性和保密性。
总之,阿波罗是一款功能强大、性能高效、安全可靠的分布式配置中心,它可以帮助应用程序实现动态配置管理,提高应用程序的可维护性和可靠性。
springboot项目中如何使用Apollo配置中心
springboot项⽬中如何使⽤Apollo配置中⼼为什么要使⽤Apollo在开发应⽤的时候我们常常需要把⼀些属性抽取出来放在配置⽂件⾥⾯,⽅便后⾯根据需要进⾏修改。
在没有使⽤配置中⼼之前,可能我们只是把配置都放在项⽬的配置⽂件下⾯,这样虽然是省事了不少,但也有⼀些缺点,⽐如想要修改配置的时候需要重新构建项⽬和重启服务、⽣产环境上⼀些敏感的配置容易泄露等等。
Apollo安装这个可以上github,上⾯有详细的安装说明⽂档,,下⾯主要讲下在代码⾥⾯的使⽤在项⽬pom.xml中引⼊apollo相关jar包<dependency><groupId>com.ctrip.framework.apollo</groupId><artifactId>apollo-client</artifactId><version>1.4.0</version></dependency>在配置⽂件(application.properties)中添加apollo相关配置# apollo集成# apollo 配置应⽤的 appidapp.id=test# apollo meta-server地址,⼀般同config-server地址#当前环境服务配置地址,⽣产环境建议⾄少双节点,可以填写多个逗号分隔,使⽤⼀个单独的域,如 (由nginx等软件负载平衡器⽀持),⽽不是多个IP地址,因为服务器可能会扩展或缩⼩。
apollo.meta=http://10.0.0.220:8080#启⽤apollo配置开关apollo.bootstrap.enabled=true#将Apollo配置加载提到初始化⽇志系统之前apollo.bootstrap.eagerLoad.enabled=true# apollo 使⽤配置的命名空间,多个以逗号分隔spaces = applicationjava代码中读取apollo配置的⼏种写法:1. 通过@Configuration和@Value注解的⽅式,此种⽅式发布会⾃动刷新@Configurationpublic class JavaConfigBean1 {@Value("${timeout:20}")private int timeout;public int getTimeout() {return timeout;}}2. 使⽤@ConfigurationProperties读取,此种⽅式发布不会⾃动刷新@Configuration@ConfigurationProperties(prefix = "xx")public class JavaConfigBean2 {private String name;public String getName() {return name;}public void setName(String name) { = name;}}3. 使⽤@ApolloConfig读取,此种⽅式发布会⾃动刷新@ApolloConfigprivate Config config;@GetMapping("/test3")public String test3(){Set <String> propertyNames = config.getPropertyNames();propertyNames.forEach(key -> {System.err.println(key+"="+config.getIntProperty(key,0));});return propertyNames.toString();}4. 使⽤@ApolloJsonValue读取,此种⽅式会⾃动刷新@ApolloJsonValue("${jsonBeanProperty:[]}")private List<User> anotherJsonBeans;@GetMapping("/test4")public void test4(){anotherJsonBeans.forEach(item -> {System.err.println(item.getUsername()+"--"+item.getPassword());});}⾃动刷新就是改了配置中⼼的配置可以不⽤重启服务,常⽤的使⽤⽅式就以上这些,当然还有⼀些复杂的使⽤⽅式,⽐如动态数据源等实现⽅式可以看官⽅的demo。
Apollo(阿波罗)分布式配置中心
Apollo(阿波罗)分布式配置中⼼第⼀部分: Apollo简介随着程序功能的⽇益复杂,程序的配置⽇益增多:各种功能的开关、参数的配置、服务器的地址……对程序配置的期望值也越来越⾼:配置修改后实时⽣效,灰度发布,分环境、分集群管理配置,完善的权限、审核机制……在这样的⼤环境下,传统的通过配置⽂件、数据库等⽅式已经越来越⽆法满⾜开发⼈员对配置管理的需求。
Apollo配置中⼼应运⽽⽣!1、Apollo简介Apollo⽀持4个维度管理Key-Value格式的配置:application (应⽤)environment (环境)cluster (集群)namespace (命名空间)配置基本概念配置是独⽴于程序的只读变量配置独⽴于程序的,同⼀个程序在不同的配置下有不同的⾏为配置对于程序是只读的,程序通过读取配置来改变⾃⼰的⾏为,程序不应该去改变配置配置伴随应⽤的整个⽣命周期配置贯穿于应⽤的整个⽣命周期,应⽤在启动时通过读取配置来初始化,在运⾏时根据配置调整⾏为配置可以有多种加载⽅式配置⽂件、环境变量、启动参数、基于数据库配置需要治理权限控制(由于配置能改变程序的⾏为,不正确的配置甚⾄能引起灾难,所以对配置的修改必须有⽐较完善的权限控制)不同环境、集群配置管理(同⼀份程序在不同的环境(开发,测试,⽣产)、不同的集群(如不同的数据中⼼)经常需要有不同的配置,所以需要有完善的环境、集群配置管理)为什么需要Apollo统⼀管理不同环境、不同集群的配置Apollo提供了统⼀界⾯集中式管理不同环境(environment)、不同集群(cluster)、不同命名空间(namespace)的配置。
同⼀份代码部署在不同的集群,可以有不同的配置,⽐如zookeeper的地址等通过命名空间(namespace)可以很⽅便地⽀持多个不同应⽤共享同⼀份配置,同时还允许应⽤对共享的配置进⾏覆盖配置修改实时⽣效(热发布)⽤户在Apollo修改完配置并发布后,客户端能实时(1秒)接收到最新的配置,并通知到应⽤程序版本发布管理所有的配置发布都有版本管理,从来很⽅便的⽀持配置回滚灰度发布⽀持配置的灰度发布,⽐如点了发布后,只对部分应⽤实例⽣效,等观察⼀段时间没问题后再推给所有应⽤实例权限管理、发布审核、操作审计应⽤和配置的管理都有完善的权限管理机制所有操作都有审计⽇志客户端配置信息监控可以在界⾯上⽅便地看到配置在被哪些实例使⽤提供Java和.Net原⽣客户端提供开放平台API部署简单 2、Apollo配置中⼼设计基础模型⽤户在配置中⼼对配置进⾏修改并发布配置中⼼通知Apollo客户端有配置更新Apollo客户端从配置中⼼拉取最新的配置、更新本地配置并通知到应⽤架构模块Config Service提供配置的读取、推送等功能,服务对象是Apollo客户端Admin Service提供配置的修改、发布等功能,服务对象是Apollo Portal(管理界⾯)Config Service和Admin Service都是多实例、⽆状态部署,所以需要将⾃⼰注册到Eureka中并保持⼼跳在Eureka之上我们架了⼀层Meta Server⽤于封装Eureka的服务发现接⼝Client通过域名访问Meta Server获取Config Service服务列表(IP+Port),⽽后直接通过IP+Port访问服务,同时在Client侧会做load balance、错误重试Portal通过域名访问Meta Server获取Admin Service服务列表(IP+Port),⽽后直接通过IP+Port访问服务,同时在Portal侧会做load balance、错误重试为了简化部署,我们实际上会把Config Service、Eureka和Meta Server三个逻辑⾓⾊部署在同⼀个JVM进程中为什么需要eureka由于config-server和admin-server会部署多个,哪个前端client(⽐如JAVA)和portal怎么找到对应的config和admin呢?Apollo配置中⼼是基于Spring Cloud开发的,我们引⼊eureka作为服务注册及服务发现,Client和Portal通过eureka获取到对应config-server和admin-server的地址,然后直接于config-server或admin-server联系各模块概要介绍Config Service提供配置获取接⼝提供配置更新推送接⼝(基于Http long polling)服务端使⽤Spring DeferredResult实现异步化,从⽽⼤⼤增加长连接数量⽬前使⽤的tomcat embed默认配置是最多10000个连接(可以调整),使⽤了4C8G的虚拟机实测可以⽀撑10000个连接,所以满⾜需求(⼀个应⽤实例只会发起⼀个长连接)。
Apollo配置中心的部署与使用经验
Apollo配置中心的部署与使用经验一、部署环境准备在部署Apollo配置中心之前,需要准备以下环境:1.操作系统:建议使用Linux或Windows服务器操作系统。
2.硬件资源:根据实际需求,准备足够的内存、CPU和存储资源。
3.网络环境:确保服务器可以访问互联网,并且网络带宽和稳定性能够满足需求。
4.软件环境:安装Java运行环境和数据库(如MySQL、PostgreSQL等)。
二、Apollo配置中心安装1.下载Apollo配置中心压缩包,并解压到目标目录。
2.修改Apollo配置文件(config.properties),配置数据库连接信息和其他相关参数。
3.运行Apollo引导程序(startup.sh或startup.bat),启动Apollo配置中心服务。
三、配置文件上传与编辑1.在浏览器中访问Apollo配置中心地址,使用默认账号(admin/123456)登录。
2.在左侧导航栏中选择“应用管理”,创建一个新的应用,并记录下应用的App ID和Secret。
3.在本地编辑配置文件(如application-default.properties),修改配置项,如数据库连接信息、日志级别等。
4.上传配置文件至Apollo配置中心,选择“发布配置”按钮,将配置发布到目标应用上。
四、配置生效与刷新1.在Apollo配置中心中,点击“生效策略”选项卡,选择“立即生效”或“定时生效”。
2.刷新目标应用,使新配置生效。
可以通过重启应用或使用热加载机制来实现。
五、权限与安全设置1.在Apollo配置中心中,可以设置不同角色的权限,如管理员、开发人员和测试人员等。
2.为每个应用设置访问权限,确保只有授权用户可以访问和修改特定应用的配置。
3.使用SSL加密通信,保证数据传输的安全性。
4.对敏感配置项进行加密存储,以保护敏感数据的安全。
六、监控与日志查看1.在Apollo配置中心中,可以查看各个应用的配置信息和运行状态。
Apollo分布式配置中心
Apollo分布式配置中⼼1. 介绍Apollo(阿波罗)是携程框架部门研发的分布式配置中⼼,能够集中化管理应⽤不同环境、不同集群的配置,配置修改后能够实时推送到应⽤端,并且具备规范的权限、流程治理等特性,适⽤于微服务配置管理场景。
-- 摘⾃Apollo官⽹1.1. 痛点修改配置后,需要重启项⽬⼤量重复的配置,不便于管理1.2. 为什么选择ApolloApollo VS Spring Cloud ConfigSpring Cloud Config 依赖于GitHub,所有配置都是写在⽂件中,然后通过提交GitHub上来⽣效的,不同的环境⽤不⽤的⽂件区分Apollo VS阿⾥云应⽤配置管理ACM依赖于阿⾥云,不便于后续迁移阿⾥云已经放弃了该项⽬,不再维护2. 快速开始2.1. 服务端配置运⾏⽅式有很多,作为⼊门,这⾥选择直接从官⽹下载打好的jar包运⾏在开始之前,⾸先需要建表。
将项⽬clone下来,脚本位于${YOUR-WORKSPACE}/apollo/scripts/db/migration/也可以直接去github上找,、1 source /your_local_path/configdb/V1.0.0__initialization.sql2 source /your_local_path/portaldb/V1.0.0__initialization.sql数据库有了,接下来修改配置⽂件中相应的数据库连接信息如⽆意外,⾄此,adminservice、configservice、portal都起来了初始账号密码是:apollo/admin⾸先,新建⼀个项⽬然后,编辑配置并发布2.2. 客户端配置application.properties修改配置后,实时⽣效下⼀篇继续探索Apollo未完待续。
3. ⽂档。
SpringCloud系列之Apollo配置中心(三)
SpringCloud系列之Apollo配置中⼼(三)本篇⽂章为系列⽂章,未读前⼏集的同学请猛戳这⾥:本篇⽂章讲解A p o l l o多环境部署⽅案,教⼤家搭建除了D E V的其他环境。
多环境部署⽅案点击链接观看:(获取更多请关注公众号「哈喽沃德先⽣」)为了让⼤家有更真实的感受,多环境部署⽅案我们在L i n u x环境下搭建,不再使⽤Q u i c k S t a r t脚本。
当项⽬要上线部署到⽣产环境时,项⽬的配置⽐如数据库、缓存、队列等服务器的地址都会发⽣改变,这时候就需要通过A p o l l o为⽣产环境添加配置。
⽬前A p o l l o预先定义的环境为:「D E V」:D e v e l o p m e n t e n v i r o n m e n t开发环境,⽤于开发者调试使⽤;「F A T」:F e a t u r e A c c e p t a n c e T e s t e n v i r o n m e n t功能验收测试环境,⽤于软件测试者测试使⽤;「U A T」:U s e r A c c e p t a n c e T e s t e n v i r o n m e n t⽤户验收测试环境(仿真环境),⽤于⽣产环境下的软件测试者测试使⽤「P R O」:P r o d u c t i o n e n v i r o n m e n t⽣产环境,最终上线环境。
这⾥我们要明确⼀些信息:P o r t a l部署在⽣产环境的机房,通过它来直接管理F A T、U A T、P R O等环境的配置即可;C o n f i g S e r v i c e、A d m i n S e r v i c e和A p o l l o C o n f i gD B在每个环境都单独部署;应⽤需要配置指定的环境,默认为D E V。
总结下来就是:⼀套P o r t a l可以管理多个环境,但是每个环境都需要独⽴部署⼀套C o n f i g S e r v i c e、A d m i n S e r v i c e和A p o l l o C o n f i g D B。
玩转apollo配置中心——springboot整合Apollo实现集中配置自动化更新
玩转apollo配置中⼼——springboot整合Apollo实现集中配置⾃动化更新前⾯我们⼀起交流了Apollo配置中⼼的基本原理以及各种环境的搭建,今天我们进⾏springboot整合Apollo实现集中化配置、⾃动化更新应⽤场景任何没有业务应⽤场景的技术都是纸上谈兵,先说说应⽤场景随着现在微服务技术越来越⽕爆热门,越来越普及,当单体服务升级为集群或者微服务的时候,服务变多变复杂,相关的配置也会呈⼏何倍数增长拿springboot举例,我们开发环境的时候,数据库参数、缓存各种参数都写在application配置⽂件中,测试、⽣产环境通过启动参数-Dspring.datasource....之类的进⾏指定。
或者有些通过application-env配置⽂件进⾏不同环境的不同参数进⾏配置,在启动的时候指定当前运⾏环境-Dspring.profile.active=dev等。
但是服务变多以后,配置参数的检查,更新将会是⼀个灾难性的场景,⽽且还不⽀持配置参数的热更新,修改参数后必须重新打包、重启应⽤。
所以在这种情况下,配置中⼼这种中间件应运⽽⽣,⽬前主流的有携程的Apollo、netflux的config、ali的nacos,今天我们主要讨论Apollo应⽤整合⾸先创建⼀个springboot应⽤,具体创建过程不是本⽂重点(略)整合改造过程1.修改pom添加Apollo依赖,以⽀持Apollo配置中⼼<dependency><groupId>com.ctrip.framework.apollo</groupId><artifactId>apollo-client</artifactId><version>1.4.0</version></dependency>2.填写Apollo信息配置# 项⽬名称app.id=${}# Apollo配置中⼼地址apollo.meta=http://localhost:8080# 是否开启spring参数⾃动更新apollo.autoUpdateInjectedSpringProperties=true3.启动类上⾯添加注解在启动类上加上apollo开启注解@EnableApolloConfig4.创建配置项项⽬改造完成以后,打开浏览器输⼊apollo控制台地址进⾏配置的管理创建⼀个和刚才创建的应⽤同名的应⽤(配置中的),然后在⾥⾯新增⼀个配置(因为8080端⼝被apollo占⽤,所以增加⼀个服务绑定端⼝的配置)test=9995server.port=8085然后在springboot中创建⼀个controller@RestControllerpublic class HelloController {@Value("${test}")private String test;@GetMapping("hello")public Object say() {System.out.println(res);return "hello " + test;}}5.启动程序,进⾏测试这样就实现了服务的集中化配置,以及⾃动化热更新apollo集群配置Apollo配置中⼼的四个维度其中有⼀个集群,默认都是没有配置集群的(default),如果有需要,可以这样添加1.Apollo配置中⼼新增⼀个集群打开Apollo控制台,进⼊项⽬,在界⾯左下⽅找到添加集群按钮并点击然后在添加集群页⾯输⼊集群名称(我这⾥⽤的shanghai),勾选所要⽣效的环境确定即可2.在springboot项⽬中使⽤springboot中如果不指定集群配置,即使⽤默认的集群default,如果需要使⽤新的集群,可在配置⽂件或者启动参数中加这个配置apollo.cluster=shanghai最后再在shanghai这个集群中添加⼀些配置并发布,⽐如test=8888server.port=8003多环境配置springboot使⽤Apollo配置中⼼的多环境配置时有些特殊这⾥我们使⽤sit环境apollo.meta=http://localhost:8082springboot中配置好后,再在apollo的sit环境中添加相应配置并发布,然后重启springboot即可看到配置已⽣效多namespace配置在apollo配置中⼼⾥多namespace配置在项⽬配置界⾯左下⾓点击添加namespace按钮,然后在添加页⾯选择创建namespace,然后输⼊名称确定即可在项⽬配置页⾯看到新建的namespace空间在这个空间⾥添加⾃⼰的配置在springboot中指定项⽬所使⽤的命名空间稍微有点不同,这⾥⽀持同时配置多个namespace,多个⽤英⽂逗号隔开spaces=application,datasources,pay.ymlPS1:这⾥需要注意的是,如果这多个namespace中包含相同的配置,那么以配置靠前的namespace中的配置为准PS2:如果apollo中添加的namespace配置格式为yml等⾮properties的时候,springboot中配置应该带上.后缀名,⽐如我的pay.yml然后在各个环境中添加好相应的配置并发布,再重启springboot即可看到多namespace的配置已⽣效⼏点个⼈建议⾸先对于四个维度app,env,cluster,namespace的应⽤application,即项⽬,每个springboot项⽬都要设置⾃⼰的名称spring.application,name,然后apollo配置中⼼中创建的项⽬名称尽量要和springboot的项⽬名称相同,这样在配置中指定app.id=${}即可,⼈员排查配置问题的时候也⽅便检查,其实重点就是⼈员⾁眼观察起来⽅便,可读性强cluster,集群,这个配置可以根据⾃⼰项⽬实际,进⾏添加配置,⽬前中⼩型公司⽤到的不多,个⼈觉得作⽤不是很⼤,⼏乎可以忽略。
Apollo配置中心使用详解
Apollo配置中⼼使⽤详解项⽬地址https:///ctripcorp/apollo.gitQuick Start部署指南https:///ctripcorp/apollo/wiki/Quick-StartApollo Quick Start Docker部署https:///ctripcorp/apollo/wiki/Apollo-Quick-Start-Docker%E9%83%A8%E7%BD%B2分布式部署指南https:///ctripcorp/apollo/wiki/%E5%88%86%E5%B8%83%E5%BC%8F%E9%83%A8%E7%BD%B2%E6%8C%87%E5%8D%97Java客户端使⽤指南https:///ctripcorp/apollo/wiki/Java%E5%AE%A2%E6%88%B7%E7%AB%AF%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97 Apollo Python 客户端https:///filamoon/pyapollo 实时同步配置、灰度配置https:///BruceWW/pyapollo 实时同步配置、灰度配置、客户端容灾https:///xhrg-product/apollo-client-python客户端设计客户端和服务端保持了⼀个长连接,从⽽能第⼀时间获得配置更新的推送。
(通过Http Long Polling实现)客户端还会定时从Apollo配置中⼼服务端拉取应⽤的最新配置。
这是⼀个fallback机制,为了防⽌推送机制失效导致配置不更新客户端定时拉取会上报本地版本,所以⼀般情况下,对于定时拉取的操作,服务端都会返回304 - Not Modified定时频率默认为每5分钟拉取⼀次,客户端也可以通过在运⾏时指定System Property: apollo.refreshInterval来覆盖,单位为分钟。
SpringFramework应用接入Apollo配置中心过程解析
SpringFramework应⽤接⼊Apollo配置中⼼过程解析环境:SpringFramework:4.3.5.RELEASEapollo-client:1.5.11.在项⽬的 resources/META-INF/ ⽬录下添加 app.properties ⽂件:#Apollo配置idapp.id = phpdragon-demoapollo.bootstrap.enabled = trueapollo.eagerLoad.enabled = trueapollo.cacheDir = /data/app_data/apollo_cache/2. 新建 ApolloConfigurer 类,负责处理合并本地properties配置:import mon.utils.ConfigUtils;import com.ctrip.framework.apollo.Config;import com.ctrip.framework.apollo.ConfigService;import org.springframework.beans.BeansException;import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;import java.util.Properties;import java.util.Set;/*** 处理apollo配置*/public class ApolloConfigurer extends PropertyPlaceholderConfigurer {static final String[] NAMESPACES = {"PUBLIC", "REDIS", "ZOOKEEPER", "application"};@Overrideprotected void processProperties(ConfigurableListableBeanFactory beanFactoryToProcess, Properties props) throws BeansException {try {this.reloadProperties(props);} catch (Exception e) {e.printStackTrace();("获取apollo配置失败");}//设置到dubbo的上下⾥ConfigUtils.addProperties(props);super.processProperties(beanFactoryToProcess, props);}private void reloadProperties(Properties props) {for (String namespace : NAMESPACES) {Config config = ConfigService.getConfig(namespace);Set<String> fieldNames = config.getPropertyNames();for (String attributeName : fieldNames) {props.put(attributeName, config.getProperty(attributeName, ""));//设置到系统变量⾥System.setProperty(attributeName, config.getProperty(attributeName, ""));}}}@Overrideprotected String resolvePlaceholder(String placeholder, Properties props) {this.reloadProperties(props);return props.getProperty(placeholder);}}3.在 Spring 的配置xml⽂件中声明配置:<bean class="com.phpdragon.config.ApolloConfigurer"><property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/><property name="ignoreResourceNotFound" value="true"/><property name="trimValues" value="true"/><property name="locations"><list><value>classpath*:*.properties</value><value>classpath*:properties/*.properties</value></list></property><property name="fileEncoding" value="UTF-8"/></bean>4.编写配置类接收远程配置变量:import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;import org.springframework.data.redis.core.StringRedisTemplate;import org.springframework.data.redis.serializer.StringRedisSerializer;import redis.clients.jedis.JedisPoolConfig;import lombok.Data;/****/@Data@Configuration//@EnableApolloConfig不能使⽤该注解,否则会导致⽆效,该注解由 ApolloConfigurer 接管类似功能public class RedisConfig {@Value("${sys.redis.host}")private String hostName;@Value("${sys.redis.port}")private int port;@Value("${redis.password}")private String password;@Value("${redis.timeout}")private int timeout;@Value("${redis.pool.maxTotal}")private int maxTotal;@Value("${redis.pool.minIdle}")private int minIdle;@Value("${redis.pool.maxIdle}")private int maxIdle;@Value("${redis.pool.maxWaitMillis}")private long maxWaitMillis;@Value("${redis.pool.testOnBorrow}")private boolean testOnBorrow;@Value("${redis.pool.testOnReturn}")private boolean testOnReturn;}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
Apollo配置中心搭建和使用教程
Apollo配置中⼼搭建和使⽤教程⽬录前⾔⼯作中使⽤的是apollo配置中⼼,平时学习也需要使⽤到,因此⾃⼰搭建⼀套,⽅便平时在家学习使⽤。
搭建过程遇到了⼀些坑,也记录下。
apollo搭建我是使⽤的京东云服务器搭建的单机环境,因此直接下载release包安装⽅便。
先说下结论,创建单机环境不要看github上apollo的官⽅做法使⽤scripts/startup.sh启动,我没做成功,坑很多,想简单,就按照我这样操作。
step1:创建apollo数据库⾃⼰数据库导⼊下⾯两个地址的sql,这样就分别创建了ApolloConfigDB、ApolloPortalDBsql地址step2:安装apollo从https:///ctripcorp/apollo/releases/tag/v1.7.1下载apollo-adminservice-1.7.1-github.zipapollo-configservice-1.7.1-github.zipapollo-portal-1.7.1-github.zip分别解压到单独的⽂件夹,进⾏如下操作1:修改下⾯三个⽬录内的⽂件,内容改为数据库地址和⽤户密码apollo-adminservice-1.7.1-github\config\application-github.propertiesapollo-configservice-1.7.1-github\config\application-github.propertiesapollo-portal-1.7.1-github\config\application-github.properties2:⾃定义端⼝,三个服务端⼝分别如下apollo-configservice 18080 注册中⼼地址apollo-adminservice 18090apollo-portal 18070 门户登陆端⼝apollo-configservice不以8080端⼝启动的情况下,要修改ApolloConfigDB库的ServerConfig表的eureka.service.url的value值为http://localhost:18080/eureka/,我是单机环境,因此是localhost,端⼝从数据库默认的8080改为18080我⾃⼰只是使⽤了dev环境,其他没使⽤,因此我的G:\apollo-portal-1.7.1-github\config\apollo-env.properties内容如下local.meta=http://localhost:18080dev.meta=http://localhost:18080#fat.meta=http://fill-in-fat-meta-server:8080#uat.meta=http://fill-in-uat-meta-server:8080lpt.meta=${lpt_meta}#pro.meta=http://fill-in-pro-meta-server:80803.上传并启动上传下⾯三个⽂件夹到服务器/mydata/apollo-1.7.1⽬录下apollo-adminservice-1.7.1apollo-configservice-1.7.1apollo-portal-1.7.14.启动启动顺序configservice->adminservice->portalnohup java -Dserver.port=18080 -Deureka.instance.ip-address={云服务器公⽹ip} -Deureka.instance.homePageUrl=http://{云服务器公⽹ip}:18080 -jar apollo-configservice-1.7.1.jar &nohup java -Dserver.port=18090 -Deureka.instance.ip-address={云服务器公⽹ip} -Deureka.instance.homePageUrl=http://{云服务器公⽹ip}:18090 -jar apollo-adminservice-1.7.1.jar &nohup java -Dserver.port=18070 -jar apollo-portal-1.7.1.jar &cd /mydata/apollo-1.7.1/apollo-configservice-1.7.1-github/nohup java -Xmx256m -Xms256m -Xmn128m -Dserver.port=18080 -Deureka.instance.ip-address=114.67.85.120 -jar apollo-configservice-1.7.1.jar &cd /mydata/apollo-1.7.1/apollo-adminservice-1.7.1-github/nohup java -Xmx256m -Xms256m -Xmn128m -Dserver.port=18090 -Deureka.instance.ip-address=114.67.85.120 -jar apollo-adminservice-1.7.1.jar &cd /mydata/apollo-1.7.1/apollo-portal-1.7.1-github/nohup java -Xmx512m -Xms512m -Xmn256m -Dserver.port=18070 -jar apollo-portal-1.7.1.jar &每个命令输⼊后等2min再启动下⼀个服务,因为有依赖关系。
apollo自动刷新原理
apollo自动刷新原理Apollo是阿里巴巴开源的分布式配置中心,能够实现分布式系统各个模块之间的配置管理。
其中,自动刷新是Apollo的一个重要特性,它不需要手动重启应用程序就可以实时更新配置文件。
在本文中,我们将详细介绍Apollo自动刷新的原理。
首先,我们需要知道Apollo的配置中心是基于Spring Cloud Config构建的。
在Spring Cloud Config中,客户端会从配置中心获取配置文件,并使用Spring的Environment对象将配置文件中的属性注入到应用程序中。
而Apollo则将这一过程进行了改进,通过监听Spring的Environment对象,当配置中心中的配置文件发生改变时,自动更新应用程序的配置。
具体来说,Apollo的自动刷新原理包括以下步骤:1. 客户端启动时,从配置中心获取配置文件,注入到Spring的Environment对象中。
2. Apollo会在服务端进行轮询,检查配置文件是否发生了改变。
3. 如果配置文件发生改变,Apollo会主动通知客户端,并将新的配置文件信息发送给客户端。
4. 客户端接收到通知后,会比对新旧配置文件,更新配置文件中发生改变的属性。
(这里的比对并不是通过比较文件内容,而是通过比较配置文件的版本号来判断是否发生变化。
)5. 客户端将更新后的配置存储在本地的内存缓存中,并更新Spring的Environment对象,使得新的配置生效。
从上述步骤可以看出,Apollo自动刷新的原理主要是通过长轮询和版本号控制来实现的。
在实际使用中,客户端可以根据自己的需要选择不同的方式进行配置更新,例如通过Spring的@RefreshScope注解来实时更新Bean对象的配置。
需要注意的是,Apollo自动刷新的频率和延迟时间会受到一些因素的影响,例如客户端与服务端之间的网络延迟、配置文件的大小等等。
对于频繁变更的配置文件,建议使用短周期的轮询方式,以保证配置的实时性。
apoll配置中心 原理
Apollo配置中心是携程开源的一款分布式配置管理平台,用于集中管理应用程序的配置信息。
它的原理如下:
1. 配置中心服务器:Apollo配置中心由一组配置中心服务器组成,这些服务器负责存储和管理配置信息。
配置中心服务器使用数据库存储配置信息,并提供了一套管理界面供用户进行配置的增删改查操作。
2. 配置客户端:应用程序通过配置客户端连接到配置中心服务器,获取配置信息。
配置客户端会定时从配置中心服务器拉取最新的配置信息,并将其缓存在本地。
3. 配置发布:当配置信息发生变化时,管理员可以通过配置中心的管理界面进行配置的发布操作。
配置中心服务器会将最新的配置信息推送给所有连接的配置客户端。
4. 配置更新:配置客户端在接收到配置更新的通知后,会重新拉取最新的配置信息,并更新本地的配置。
应用程序可以通过配置客户端提供的API获取最新的配置信息。
5. 配置缓存:为了提高配置的读取性能,配置客户端会将配置信息缓存在本地。
当配置中心服务器不可用时,配置客户
端可以使用本地缓存的配置信息继续运行。
总结来说,Apollo配置中心通过配置中心服务器存储和管理配置信息,配置客户端通过与配置中心服务器的交互获取最新的配置信息,并将其缓存在本地。
这样可以实现配置的集中管理和动态更新,提高应用程序的灵活性和可维护性。
学习使用Apollo配置中心
学习使⽤Apollo配置中⼼Apollo(阿波罗)是携程框架部门研发的配置管理平台,能够集中化管理应⽤不同环境、不同集群的配置,配置修改后能够实时推送到应⽤端。
如何安装服务端可以按照上⾯官⽹的步骤。
这⾥主要说明⼀下应⽤如何接⼊apollo。
应⽤接⼊apollo步骤:1、Appid确保classpath:/META-INF/app.properties⽂件存在,并且其中内容形如:app.id=YOUR-APP-ID服务端的appid2、Environment应⽤在不同的环境可以有不同的配置, Environment可以通过以下3种⽅式的任意⼀个配置:2.1 通过Java的System Property env来指定环境-Denv=YOUR-ENVIRONMENT2.2 通过操作系统的System Environment env来指定环境2.3 通过配置⽂件来指定env=YOUR-ENVIRONMENT对于Mac/Linux,⽂件位置为/opt/settings/server.properties对于Windows,⽂件位置为C:\opt\settings\server.properties⽬前,env⽀持以下⼏个值(⼤⼩写不敏感):DEV, FAT, UAT, PRO服务端的environment3、本地缓存Apollo客户端会把从服务端获取到的配置在本地⽂件系统缓存⼀份,当去服务器读取配置失败时,会使⽤本地缓存的。
Mac/Linux: /opt/data/{appId}/config-cacheWindows: C:\opt\data{appId}\config-cache确保⽬录存在,且应⽤有读写权限。
4、添加依赖<dependency><groupId>com.ctrip.framework.apollo</groupId><artifactId>apollo-client</artifactId><version>0.6.2</version></dependency><repository><id>internal.repo</id><url>https:///ctripcorp/apollo/mvn-repo/</url></repository>5、指定服务端通过Java的System Property env来指定-Ddev_meta=http://192.168.30.27:80186、读取配置通过namespace读取配置,如果不指定则默认拿application6.1 api⽅式通过api⽅式获取的配置,修改时不⽤重启项⽬,直接⽣效。
apollo与springboot集成实现动态刷新配置的教程详解
apollo与springboot集成实现动态刷新配置的教程详解分布式apollo简介Apollo(阿波罗)是携程框架部门研发的开源配置管理中⼼,能够集中化管理应⽤不同环境、不同集群的配置,配置修改后能够实时推送到应⽤端,并且具备规范的权限、流程治理等特性。
本⽂主要介绍如何使⽤apollo与springboot实现动态刷新配置,如果之前不了解apollo可以查看如下⽂档学习了解⼀下apollo,再来查看本⽂正⽂apollo与spring实现动态刷新配置本⽂主要演⽰2种刷新,⼀种基于普通字段刷新、⼀种基于bean上使⽤了@ConfigurationProperties刷新1、普通字段刷新a、pom.xml配置<dependency><groupId>com.ctrip.framework.apollo</groupId><artifactId>apollo-client</artifactId><version>1.6.0</version></dependency>b、客户端配置AppId,Apollo Meta Server此配置有多种⽅法,本⽰例直接在application.yml配置,配置内容如下c、项⽬中启动类上加上@EnableApolloConfig注解,形如下@SpringBootApplication@EnableApolloConfig(value = {"application","user.properties","product.properties","order.properties"})public class ApolloApplication {public static void main(String[] args) {SpringApplication.run(ApolloApplication.class, args);}}@EnableApolloConfig不⼀定要加在启动类上,加在被spring管理的类上即可d、在需刷新的字段上配置@Value注解,形如@Value("${hello}")private String hello;通过以上三步就可以实现普通字段的动态刷新2.bean使⽤@ConfigurationProperties动态刷新bean使⽤@ConfigurationProperties注解⽬前还不⽀持⾃动刷新,得编写⼀定的代码实现刷新。
springcloudalibaba使用
springcloudalibaba使用springcloudalibaba使用Spring Cloud Alibaba是一个基于SpringCloud的微服务开发框架,它集成了阿里巴巴的分布式中间件技术,提供了一整套微服务解决方案。
Spring Cloud Alibaba致力于提供微服务架构在阿里云上的快速部署、持续交付、使用和管理能力,为云原生应用提供更好的开发体验。
Spring Cloud Alibaba的优势在于它可以将微服务开发和运行在阿里云平台上,充分利用阿里云的资源,提升研发效率,同时也可以更加便捷地部署和管理应用,为开发者提供更多的灵活性。
一、Spring Cloud Alibaba的核心功能介绍1、注册中心Spring Cloud Alibaba提供了一个基于Nacos的注册中心,这个注册中心可以提供服务的发现和注册功能,可以让服务之间进行相互发现,保证微服务的正常运行。
2、配置中心Spring Cloud Alibaba提供了一个基于Apollo的配置中心,这个配置中心可以提供应用的配置信息,包括应用的配置文件、环境变量等,可以让应用能够更加灵活地部署。
3、服务网关Spring Cloud Alibaba提供了一个基于Spring Cloud Gateway的服务网关,这个服务网关可以提供服务路由、服务限流、服务熔断等功能,可以对外暴露一个统一的网关,方便用户调用。
4、服务链路追踪Spring Cloud Alibaba提供了一个基于SkyWalking 的服务链路追踪,这个服务链路追踪可以提供调用链路的追踪,可以更加清晰地描述出服务之间的调用关系,方便debug和监控。
5、分布式消息中间件Spring Cloud Alibaba提供了一个基于RocketMQ的分布式消息中间件,这个消息中间件可以提供可靠的消息传递,可以实现微服务之间的异步调用,方便实现异步操作。
6、容器云服务Spring Cloud Alibaba提供了一个基于Kubernetes的容器云服务,这个容器云服务可以提供容器化应用的部署、管理、监控等功能,可以实现容器化应用的快速部署和管理。
SpringBoot整合Apollo配置中心快速使用详解
SpringBoot整合Apollo配置中⼼快速使⽤详解⽬录⼀、简介⼆、使⽤1.测试项⽬搭建2.Apollo配置中⼼的配置3.项⽬启动与测试4.常见整合问题附录⼀、简介1.Apollo 是什么?Apollo(阿波罗)是携程框架部门研发的分布式配置中⼼。
服务端基于Spring Boot和Spring Cloud开发。
2.为什么要使⽤Apollo?安全性:配置跟随源代码保存在代码库中,容易造成配置泄漏时效性:普通⽅式配置,修改配置,需要重启服务才能⽣效局限性:⽆法⽀持动态调整:例如⽇志开关、功能开关⼆、使⽤1. 测试项⽬搭建注:本⽂主要介绍SpringBoot 整合 Apollo 实现动态配置1.1 添加Maven依赖<dependency><groupId>com.ctrip.framework.apollo</groupId><artifactId>apollo-client</artifactId><version>1.3.0</version></dependency>1.2 配置⽂件# apollo集成# apollo 配置应⽤的 appidapp.id=springboot-apollo-demo1# apollo meta-server地址,⼀般同config-server地址apollo.meta=http://192.168.0.153:8080#启⽤apollo配置开关apollo.bootstrap.enabled=trueapollo.bootstrap.eagerLoad.enabled=true# apollo 使⽤配置的命名空间,多个以逗号分隔spaces = application配置说明:app.id:在配置中⼼配置的应⽤⾝份信息。
apollo.bootstrap.enabled:在应⽤启动阶段是否向Spring容器注⼊被托管的properties⽂件配置信息。
面试题apollo的基本原理
面试题apollo的基本原理
Apollo是携程开源的一款配置中心,其基本原理可以概括为以下几点:
1. 配置写入:Apollo提供一个Web界面供用户进行配置的写入和修改操作,用户在界面端对配置进行修改完成后,Apollo会将配置信息提交到分布式存储中进行持久化。
2. 配置发布:Apollo支持多环境配置的管理,如dev、test、prod等等。
配置发布时,环境信息会被存储到Apollo的数据库中,客户端会定期从数据库获取最新的配置,进行更新。
3. 客户端订阅:Apollo客户端会定时从配置中心获取最新的配置数据,这个过程中,阿波罗客户端与阿波罗配置中心之间是通过HTTP协议通信的,最新的配置数据对应的HTTP地址由阿波罗客户端自动探测得出。
4. 实现原理:Apollo中的配置变更信息会被存储到数据库和消息队列,客户端通过定时拉取的方式获取最新的配置信息。
当配置变更时,阿波罗配置中心将变更后的数据推送到消息队列,然后客户端将变更的数据从消息队列中消费出来存储到内存中,完成时,客户端重新启动,从而实现了配置的热更新。
总体来说,Apollo是一个分布式、高可用的配置中心,其基本原理是通过化的配置管理实现应用程序配置的统一管理和发布。
springbootlogback如何从apollo配置中心读取变量
springbootlogback如何从apollo配置中⼼读取变量⽬录springbootlogback从apollo配置中⼼读取变量1、在apollo配置中⼼添加2、项⽬的application.yml配置⽂件配置如下3、在logback.xml配置springProperty标签SpringBootLogback⽆法获取配置中⼼属性如何解决解决⽅案springboot logback 从apollo配置中⼼读取变量1、在apollo配置中⼼添加logback-config.properties配置⽂件2、项⽬的application.yml配置⽂件配置如下主要是eagerLoad.enabled: true这个配置app:id: SX-sale-app-soaapollo:bootstrap:enabled: true#将Apollo配置加载提到初始化⽇志系统之前eagerLoad:enabled: truenamespaces: application.yml,logback-config3、在logback.xml配置springProperty标签设置好标签名称和配置中⼼变量名称的,使⽤的时候${name}引⼊该变量<?xml version="1.0" encoding="UTF-8"?><!-- ⽇志级别从低到⾼分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 --><!-- scan:当此属性设置为true时,配置⽂件如果发⽣改变,将会被重新加载,默认值为true --><!-- scanPeriod:设置监测配置⽂件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。
apollo原理
apollo原理Apollo原理:分布式配置中心随着互联网的发展,应用系统的规模越来越大,系统的配置也变得越来越复杂。
传统的配置方式,如硬编码、配置文件等,已经无法满足现代应用的需求。
为了解决这个问题,阿里巴巴开发了一款分布式配置中心——Apollo。
Apollo是一款开源的分布式配置中心,它可以帮助开发者集中管理应用系统的配置,提高配置的可维护性和可扩展性。
Apollo的原理是基于分布式架构,它将配置信息存储在中心化的配置中心中,应用系统通过访问配置中心获取配置信息。
Apollo的架构分为三层:客户端、服务端和配置中心。
客户端是应用系统,服务端是Apollo的后台服务,配置中心是存储配置信息的地方。
客户端通过访问服务端获取配置信息,服务端通过访问配置中心获取配置信息。
Apollo的配置中心采用了分布式存储的方式,它将配置信息存储在多个节点上,保证了配置信息的高可用性和可扩展性。
同时,Apollo的配置中心还支持配置的版本管理和灰度发布,可以帮助开发者更好地管理配置信息。
Apollo的客户端是应用系统,它通过访问服务端获取配置信息。
客户端可以通过配置文件或代码的方式集成Apollo,从而实现配置信息的自动更新和动态刷新。
同时,Apollo的客户端还支持配置的缓存和本地化,可以提高配置信息的访问效率和可靠性。
Apollo的服务端是Apollo的后台服务,它负责处理客户端的请求和管理配置信息。
服务端采用了高可用的架构,可以保证服务的稳定性和可靠性。
同时,服务端还支持配置的监控和告警,可以帮助开发者及时发现和解决配置问题。
Apollo是一款优秀的分布式配置中心,它的原理是基于分布式架构,可以帮助开发者集中管理应用系统的配置,提高配置的可维护性和可扩展性。
如果你正在寻找一款分布式配置中心,那么Apollo一定是你的不二选择。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
Apollo in depth•Core Concepts
•
application (应用用)
基于Spring Cloud的 Apollo配置中心心介绍
宋顺 携程框架研发部
Overview
• • • • •
What is Apollo Why Apollo Apollo at a glance Apollo in depth Future
一一个小小故事
•
小小A是XX团队主力力力开发,有一一天产品说要上线一一 个迪士士尼⻔门票内购功能 由于迪士士尼⻔门票很火火爆,产品一一拍脑袋说,每个 用用户限购5张! 于是小小A在代码里里里是这么写的
•
•
private static final int MAX_QTY_PER_USER = 5;//产品需求限购5张 if (qty > MAX_QTY_PER_USER) { throw new IllegalStateException( String.format("每个用用户最多购买%d张!", MAX_QTY_PER_USER)); }
Apollo at a glance
•
客户端监听配置变化(Java API样例例)
Config config = ConfigService.getAppConfig(); config.addChangeListener(new ConfigChangeListener() { @Override public void onChange(ConfigChangeEvent changeEvent) { for (String key : changeEvent.changedKeys()) { ConfigChange change = changeEvent.getChange(key); System.out.println(String.format( “Found change - key: %s, oldValue: %s, newValue: %s, changeType: %s”, change.getPropertyName(), change.getOldValue(), change.getNewValue(), change.getChangeType())); } } });
•
配置可以有多种加载方方式
•
程序内部hard code,配置文文件,环境变量量,启动参数,基于数据库等
•
配置需要治理理
• • •
权限控制、发布审核 不不同环境、集群配置管理理 公共组件配置管理理
Why Apollo
•
有治理理能力力力的配置管理理平台
• • • • • • •
统一一管理理不不同环境、不不同集群的配置 配置修改实时生生效(热发布) 版本发布管理理 灰度发布 权限管理理、发布审核、操作审计 客户端配置信息监控 Java,.Net原生生客户端,Spring支支持
What is Configuration
•
配置是独立立于程序的只读变量量
•
DB Connection Str、Thread Pool Size、Buffer Size、Request Timeout、 Feature Switch、Server Urls等
•
配置伴随应用用的整个生生命周期
•
启动时读取配置,运行行行时根据配置调整行行行为
•
•
一一个小小故事
•
第二二天中午,由于内购实在太火火爆,产品急匆匆 的跑过来对小小B说,赶紧改成每人人1张! 小小B不不紧不不慢的说:10秒内搞定~
•
What is Apollo
• •
携程框架部⻔门推出的应用用配置中心心 支支持4个维度管理理配置(Key-Value)
• • • •
application (应用用) environment (环境) cluster (集群) namespace (命名空间)
•
客户端获取配置(Java API样例例)
Config config = ConfigService.getAppConfig(); Integer defaultRequestTimeout = 200; Integer requestTimeout = config.getIntProperty(“request.timeout”, defaultRequestTimeout);
Apollo at a glance
•
Spring集成样例例
@Configuration @EnableApolloConfig public class AppConfig {} @Component public class SomeBean { @Value("${request.timeout:200}") private int timeout; @ApolloConfigChangeListener private void someChangeHandler(ConfigChangeEvent changeEvent) { if (changeEvent.isChanged("request.timeout")) { refreshTimeout(); } }
一一个小小故事
•
第二二天中午,由于内购实在太火火爆,产品急匆匆 的跑过来对小小A说,赶紧改成每人人1张! 小小A只好放弃了了午饭,改代码、回归测试、上线, 整整花了了1个小小时才搞定。。。
•
一一个小小故事
•
小小B是YY团队主力力力开发,有一一天产品说要上线一一 个欢乐谷谷⻔门票内购功能 由于欢乐谷谷⻔门票很火火爆,产品一一拍脑袋说,每个 用用户限购5张! 小小B吸取了了小小A的教训,二二话不不说把配置写在了了 Apollo配置中心心
Apollo at a glance
Apollo at a glance
Apollo at a glance
•
添加/修改配置项
Apollo at a glance
•
添加/修改配置项
Apollo at a glance
•
发布配置
Apollo at a glance
•
发布配置
Apollo at a glance