SpringBoot项目集成携程Apollo

得意时要看淡,失意时要看开。不论得意失意,切莫大意;不论成功失败,切莫止步。志得意满时,需要的是淡然,给自己留一条退路;失意落魄时,需要的是泰然,给自己觅一条出路SpringBoot项目集成携程Apollo,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

参考文档:

https://www.apolloconfig.com/#/zh/README
https://zhuanlan.zhihu.com/p/28723169

Apollo简介

Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。

Apollo支持4个维度管理Key-Value格式的配置:

  1. application(应用)
  2. environment(环境)
  3. cluster(集群)
  4. namespace(命名空间)

总体设计:
在这里插入图片描述
上图简要描述了Apollo的总体设计,我们可以从下往上看:

  • ConfigService
    提供配置的读取、推送等功能,服务对象是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进程中。

集成

服务端开发使用的是Java,基于Spring Cloud和Spring Boot框架。客户端目前提供了Java和.Net两种实现。

注意的是,Java客户端方面:
支持Spring Placeholder,Annotation和Spring Boot的ConfigurationProperties,方便应用使用(需要Spring 3.1.1+)

Spring Boot项目集成:参考下面的部分
spring-boot集成方式(推荐)

通过application.properties/bootstrap.properties来配置,该方式能使配置在更早的阶段注入。

Demo

SpringBoot项目集成:

  1. 引入依赖:
<!--Apollo的客户端-->
<dependency>
    <groupId>com.ctrip.framework.apollo</groupId>
    <artifactId>apollo-client</artifactId>
    <version>1.7.0</version>
</dependency>
  1. spring boot启动类上加上注解@EnableApolloConfig
import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableApolloConfig
public class SpringBootApolloApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootApolloApplication.class, args);
    }

}
  1. 修改配置文件:
spring.application.name=spring-boot-apollo

server.port=8090

# apollo配置
app.id=xxx

apollo.meta=http://localhost:8080
#apollo.cluster=default
# will inject 'application' namespace in bootstrap phase
apollo.bootstrap.enabled=true
# 注入非默认application namespace或多个namespace的配置
apollo.bootstrap.namespaces=application
# put apollo initialization before logging system initialization:使Apollo的加载顺序放到日志系统加载之前
apollo.bootstrap.eagerLoad.enabled=true

logging.level.com.xxx=debug

如果配置了集群,但是没找到,会用默认集群:default的配置;没找到namespace会用默认namespace:application的配置。

配置说明:
app.id 在配置中心配置的应用身份信息。
apollo.bootstrap.enabled 在应用启动阶段是否向Spring容器注入被托管的properties文件配置信息。
apollo.bootstrap.eagerLoad.enabled将Apollo配置加载提到初始化日志系统之前。
apollo.bootstrap.namespaces配置的命名空间,多个逗号分隔,一个namespace相当于一个配置文件。
apollo.meta当前环境服务配置地址,生产环境建议至少双节点,可以填写多个逗号分隔,使用一个单独的域,如 http://config.xxx.com(由nginx等软件负载平衡器支持),而不是多个IP地址,因为服务器可能会扩展或缩小。

  1. 基于@Value注解配置
@Component
public class ValueStyleProperty {

@Value("${apollo.value.demoKey1}")
private String demoKey1;


@Value("${apollo.value.demoKey2}")
private String demoKey2;
//省略 get/set 方法
}

参考链接

https://www.cnblogs.com/jvStarBlog/p/12188176.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/155649.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!