Apollo:服务端搭建、和SpringBoot集成

简介: Apollo:服务端搭建、和SpringBoot集成

Apollo服务端搭建:


单机环境搭建:

参考:https://github.com/ctripcorp/apollo/wiki/Quick-Start

注意事项:

  • 编辑demo.sh,修改ApolloPortalDB和ApolloConfigDB相关的数据库连接串信息
#apollo config db info
apollo_config_db_url=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8
apollo_config_db_username=用户名
apollo_config_db_password=密码(如果没有密码,留空即可)
 
# apollo portal db info
apollo_portal_db_url=jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8
apollo_portal_db_username=用户名
apollo_portal_db_password=密码(如果没有密码,留空即可)
  • Quick Start脚本会在本地启动3个服务,分别使用8070, 8080, 8090端口,请确保这3个端口当前没有被使用
  • 如果部署在非本机环境,修改localhost为部署机器的IP或域名
# 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

Quick Start只是用来帮助大家快速体验Apollo项目,具体实际使用时请参考:分布式部署指南

另外需要注意的是Quick Start不支持增加环境只有通过分布式部署才可以新增环境,同样请参考:分布式部署指南


分布式环境搭建:

参考:https://github.com/ctripcorp/apollo/wiki/分布式部署指南


注意事项:

分布式部署需要事先确定部署的环境以及部署方式。

Apollo目前支持以下环境:

  • DEV
    • 开发环境
  • FAT
    • 测试环境,相当于alpha环境(功能测试)
  • UAT
    • 集成环境,相当于beta环境(回归测试)
  • PRO
    • 生产环境

如果希望添加自定义的环境名称,具体步骤可以参考部署&开发遇到的常见问题#42-添加自定义的环境

以ctrip为例,我们的部署策略如下: image

  • Portal部署在生产环境的机房,通过它来直接管理FAT、UAT、PRO等环境的配置
  • Meta Server、Config Service和Admin Service在每个环境都单独部署,使用独立的数据库
  • Meta Server、Config Service和Admin Service在生产环境部署在两个机房,实现双活
  • Meta Server和Config Service部署在同一个JVM进程内,Admin Service部署在同一台服务器的另一个JVM进程内


Apollo客户端

我们客户端基于Spring Boot 2.0搭建,开发工具是InteIIij IDEA


1.1 环境要求

  • Java: 1.7+
  • Guava: 15.0+
    • Apollo客户端默认会引用Guava 19,如果你的项目引用了其它版本,请确保版本号大于等于15.0

注:对于Apollo客户端,如果有需要的话,可以做少量代码修改来降级到Java 1.6,详细信息可以参考Issue 483


1.2 必选设置

Apollo客户端依赖于AppIdApollo Meta Server等环境信息来工作,所以请确保阅读下面的说明并且做正确的配置:


1.2.1 AppId

AppId是应用的身份信息,是从服务端获取配置的一个重要信息。

这里主要介绍常用的  application.properties 和 app.properties方式

  • Spring Boot application.properties

Apollo 1.0.0+支持通过Spring Boot的application.properties文件配置,如

app.id=YOUR-APP-ID

该配置方式不适用于多个war包部署在同一个tomcat的使用场景

  • app.properties

确保classpath:/META-INF/app.properties文件存在,并且其中内容形如:

app.id=YOUR-APP-ID

文件位置参考如下:


注:app.id是用来标识应用身份的唯一id,格式为string。


1.2.2 Apollo Meta Server

Apollo支持应用在不同的环境有不同的配置,所以需要在运行提供给Apollo客户端当前环境的Apollo Meta Server信息。默认情况下,meta server和config service是部署在同一个JVM进程,所以meta server的地址就是config service的地址。

  • 通过apollo-env.properties文件
    • 用户也可以创建一个apollo-env.properties,放在程序的classpath下,或者放在spring boot应用的config目录下
    • 使用该配置方式,那么就必须要正确配置Environment,详见1.2.2.1 Environment
    • 文件内容形如:
dev.meta=http://1.1.1.1:8080
fat.meta=http://apollo.fat.xxx.com
uat.meta=http://apollo.uat.xxx.com
pro.meta=http://apollo.xxx.com


1.2.2.1 Environment

Environment可以通过以下3种方式的任意一个配置:

  1. 通过Java System Property(推荐)
    • 可以通过Java的System Property env来指定环境
    • 在Java程序启动脚本中,可以指定-Denv=YOUR-ENVIRONMENT
      • 如果是运行jar文件,需要注意格式是java -Denv=YOUR-ENVIRONMENT -jar xxx.jar
    • 注意key为全小写
    • 例如:–Denv=pro –Dpro_meta=http://api-beta.digitalworkplace.cn/configcenter
  1. Tomcat启动方式(推荐)
在startup.sh 或者catalina.sh中加入
JAVA_OPTS=”xxxx”
例如:
JAVA_OPTS=”–Denv=pro –Dpro_meta=http://api-cloudlink.digitalworkplace.cn/configcenter”
注意:具体的OPTS参数示环境而定


  1. 通过配置文件
    • 最后一个推荐的方式是通过配置文件来指定env=YOUR-ENVIRONMENT
    • 对于Mac/Linux,文件位置为/opt/settings/server.properties
    • 对于Windows,文件位置为C:\opt\settings\server.properties

文件内容形如:

env=DEV

目前,env支持以下几个值(大小写不敏感):

  • DEV
    • Development environment
  • FAT
    • Feature Acceptance Test environment
  • UAT
    • User Acceptance Test environment
  • PRO
    • Production environment

 

 

Apollo 1.0.0版本开始支持以下方式配置apollo meta server信息

  1. 通过Java System Property apollo.meta
    • 可以通过Java的System Property apollo.meta来指定
    • 在Java程序启动脚本中,可以指定-Dapollo.meta=http://config-service-url
      • 如果是运行jar文件,需要注意格式是java -Dapollo.meta=http://config-service-url -jar xxx.jar
    • 也可以通过程序指定,如System.setProperty("apollo.meta", "http://config-service-url");
  1. 通过Spring Boot的配置文件
    • 可以在Spring Boot的application.propertiesbootstrap.properties中指定apollo.meta=http://config-service-url
    • 该配置方式不适用于多个war包部署在同一个tomcat的使用场景
  1. 通过server.properties配置文件
    • 可以在server.properties配置文件中指定apollo.meta=http://config-service-url
    • 对于Mac/Linux,文件位置为/opt/settings/server.properties
    • 对于Windows,文件位置为C:\opt\settings\server.properties
  1. 通过app.properties配置文件
    • 可以在classpath:/META-INF/app.properties指定apollo.meta=http://config-service-url

如果通过以上各种手段都无法获取到Meta Server地址,Apollo最终会fallback到http://apollo.meta作为Meta Server地

 

1.2.3 本地缓存路径


Apollo客户端会把从服务端获取到的配置在本地文件系统缓存一份,用于在遇到服务不可用,或网络不通的时候,依然能从本地恢复配置,不影响应用正常运行。

本地缓存路径默认位于以下路径,所以请确保/opt/dataC:\opt\data\目录存在,且应用有读写权限。

  • Mac/Linux: /opt/data/{ appId}/config-cache
  • Windows: C:\opt\data\{ appId}\config-cache

本地配置文件会以下面的文件名格式放置于本地缓存路径下:

{appId}+{cluster}+{namespace}.properties

  • appId就是应用自己的appId,如100004458
  • cluster就是应用使用的集群,一般在本地模式下没有做过配置的话,就是default
  • namespace就是应用使用的配置namespace,一般是application

文件内容以properties格式存储,比如如果有两个key,一个是request.timeout,另一个是batch,那么文件内容就是如下格式:

request.timeout=2000

batch=2000

1.3 引入Maven Dependency

Apollo的客户端jar包,从1.0.0后已经上传到中央仓库,之前版本需要手动install到本地仓库

image

<dependency>
   <groupId>com.ctrip.framework.apollo</groupId>
   <artifactId>apollo-client</artifactId>
   <version>0.10.0</version>
</dependency>
<dependency>
   <groupId>com.ctrip.framework.apollo</groupId>
   <artifactId>apollo-core</artifactId>
   <version>0.10.0</version>
</dependency>
<dependency>
   <groupId>com.google.guava</groupId>
   <artifactId>guava</artifactId>
   <version>19.0</version>
</dependency>
<dependency>
   <groupId>com.google.inject</groupId>
   <artifactId>guice</artifactId>
   <version>4.1.0</version>
</dependency>
<dependency>
   <groupId>com.google.code.gson</groupId>
   <artifactId>gson</artifactId>
   <version>2.8.0</version>
</dependency>

 

1.4 开启Apollo客户端

SpringBoot 在项目的启动类上添加@EnableApolloConfig注解

注意:项目启动时需要指定Environment ,参考:1.2.2.1 Environment

Apollo 1.0.0版本开始支持配置apollo meta server信息

我们可以直接将AppId和Apollo Meta Server,配置在application.properties中

# 应用ID(在Apollo服务端新增项目添加的应用ID)
app.id=testclient
# apollo-configservice地址
apollo.meta=http://127.0.0.1:8080


1.5 应用中获取配置信息的几种方式 

1.5.1.通过@value注解获取配置值

例如:

    @Value(“${test}”)

    private String test;

1.5.2.通过@ConfigurationProperties注入到bean对象中获取配置信息

  例如:

    @ConfigurationProperties(prefix=”test”)

    Public class Myprop{undefined

       private Map<String,String> prop = Maps.newLinkedHashMap();

    }

  在被spring管理的类中使用:

  @Autowired

  private Myprop myprop;

  prop.getProp().get(“name”);

  注:使用这种方式获取的属性值不会实时更新。

1.5.3.通过@ApolloConfig获取注入的config对象,再通过config对象获取属性值

  例如:

    在被spring管理的类中使用:

    @ApolloConfig

    private Config config;

    config.getProperty(“name”,null);

1.5.4.通过java API的方式获取

 Config config = ConfigService.getAppConfig();

  String someKey = "someKeyFromDefaultNamespace";

  String someDefaultValue = "someDefaultValueForTheKey";

  String value = config.getProperty(someKey, someDefaultValue);

1.5.5.在配置文件中获取属性值

  例如:在application.properties中,

  spring.datasource.name=${jdbc.name}

  spring.datasource.password=${jdbc.password}

参考:https://github.com/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



目录
相关文章
|
23天前
|
JSON Java 开发工具
Java服务端集成Google FCM推送的注意事项和实际经验
本文分享了作者在公司APP海外发布过程中,选择Google FCM进行消息推送的集成经验。文章详细解析了Java集成FCM推送的多种实现方式,包括HTTP请求和SDK集成,并指出了通知栏消息和透传消息的区别与应用场景。同时,作者还探讨了Firebase项目的创建、配置和服务端集成的注意事项,帮助读者解决文档混乱和选择困难的问题。
44 1
|
1月前
|
JSON Java 开发工具
Java服务端集成Google FCM推送的注意事项和实际经验
公司的app要上海外,涉及到推送功能,经过综合考虑,选择Google FCM进行消息推送。 查看一些集成博客和官方文档,看的似懂非懂,迷迷惑惑。本篇文章除了将我实际集成的经验分享出来,也会对看到的博客及其中产生的疑惑、注意事项一一评论。 从官方文档和众多博客中,你会发现Java集成FCM推送有多种实现方式,会让生产生文档很乱,不知作何选择的困惑。
79 0
|
4月前
|
监控 druid Java
spring boot 集成配置阿里 Druid监控配置
spring boot 集成配置阿里 Druid监控配置
287 6
|
4月前
|
Java 关系型数据库 MySQL
如何实现Springboot+camunda+mysql的集成
【7月更文挑战第2天】集成Spring Boot、Camunda和MySQL的简要步骤: 1. 初始化Spring Boot项目,添加Camunda和MySQL驱动依赖。 2. 配置`application.properties`,包括数据库URL、用户名和密码。 3. 设置Camunda引擎属性,指定数据源。 4. 引入流程定义文件(如`.bpmn`)。 5. 创建服务处理流程操作,创建控制器接收请求。 6. Camunda自动在数据库创建表结构。 7. 启动应用,测试流程启动,如通过服务和控制器开始流程实例。 示例代码包括服务类启动流程实例及控制器接口。实际集成需按业务需求调整。
366 4
|
4月前
|
消息中间件 Java 测试技术
【RocketMQ系列八】SpringBoot集成RocketMQ-实现普通消息和事务消息
【RocketMQ系列八】SpringBoot集成RocketMQ-实现普通消息和事务消息
317 1
|
5月前
|
消息中间件 Java Kafka
springboot集成kafka
springboot集成kafka
168 2
|
4月前
|
开发工具 开发者
【使用必读】服务端集成网易云信IM 即时通讯-回调说明篇(二)
【使用必读】服务端集成网易云信IM 即时通讯-回调说明篇(二)
72 0
|
4月前
|
JSON 安全 应用服务中间件
【使用必读】服务端集成网易云信IM 即时通讯-回调说明篇(一)
【使用必读】服务端集成网易云信IM 即时通讯-回调说明篇(一)
74 0
|
4月前
|
安全 Java API
【新手必看】服务端集成网易云信IM 即时通讯
【新手必看】服务端集成网易云信IM 即时通讯
98 0
|
4月前
|
消息中间件 Java Kafka
Spring Boot与Apache Kafka Streams的集成
Spring Boot与Apache Kafka Streams的集成

热门文章

最新文章