本文将介绍如何在 Spring Boot 中集成阿波罗(Apollo)和 Consul,并使用 Apollo 和 Consul 实现配置管理和服务注册与发现的功能。
阿波罗是携程开源的分布式配置中心,支持多种编程语言和框架。它提供了一套完整的配置管理解决方案,可以帮助开发者实现配置管理、版本控制、灰度发布等功能。
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。服务端基于 Spring Boot 和 Spring Cloud 开发,打包后可以直接运行,不需要额外安装 Tomcat 等应用容器。
Apollo 支持 4 个维度管理 Key-Value 格式的配置:
上图是Apollo配置中心中一个项目的配置首页
Spring Boot 集成阿波罗可以通过引入 apollo-client
客户端库,并在 Spring Boot 应用程序中配置连接信息和获取配置信息来实现。具体流程如下:
Spring Boot 应用程序启动时,先加载 bootstrap.yml
或者 bootstrap.properties
文件中的配置信息。
在 bootstrap.yml
或者 bootstrap.properties
中配置阿波罗的连接信息(例如,阿波罗的地址、应用程序名称等)。
在 Spring Boot 应用程序中注入 @Value
注解中指定的阿波罗配置项的值,即可使用阿波罗管理的配置信息。
如果阿波罗的配置信息发生改变,Spring Boot 应用程序会自动从阿波罗更新最新的配置信息,并重新加载应用程序的配置。
集成阿波罗可以带来以下优势:
管理多个环境的配置:阿波罗提供了环境切换和灰度发布的功能,可以轻松管理多个环境(例如,开发环境、测试环境、生产环境等)的配置信息。
实时更新配置:阿波罗支持实时更新配置信息,可以在不重启应用程序的情况下动态更新配置信息。
版本控制:阿波罗提供了版本控制的功能,可以记录每个配置项的历史版本,方便回滚和恢复数据。
集成多种框架:阿波罗支持多种编程语言和框架,可以轻松集成到各种应用程序中。
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.5.4
com.springboot.demo
web-demo
0.0.1-SNAPSHOT
web-demo
web-demo
1.8
Finchley.RELEASE
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-consul-discovery
org.springframework.boot
spring-boot-starter-actuator
org.springframework.boot
spring-boot-starter-test
test
com.ctrip.framework.apollo
apollo-client
1.5.1
org.springframework.boot
spring-boot-maven-plugin
org.springframework.cloud
spring-cloud-dependencies
2020.0.3
pom
import
apollo:
bootstrap:
enabled: true
eagerLoad:
enabled: true
namespaces: application,tech.java.consul,tech.java.logback
spring.cloud.consul.host = localhost
spring.cloud.consul.port = 8500
spring.cloud.consul.discovery.prefer-ip-address = true
spring.cloud.consul.discovery.instance-id = ${spring.application.name}-${POD_IP:localhost}-${server.port}
consul.datacenter = uat
spring.cloud.consul.discovery.healthCheckPath = ${management.context-path}/health
consul.cluster = uat
management.context-path = /actuator
consul.version = 1.5.3
log.pattern = %d{yyyy-MM-dd HH:mm:ss.SSS} %level | [%t] %logger{36} [%L] | %msg%n
log.dir = /app/logs/app
上面为公共的配置引用,可以被多个项目使用
接下来创建一个单独的Apollo项目。
创建一个单独的 Apollo 项目可以分为以下几个步骤:
登录阿波罗控制台:在浏览器中输入 https://config.xxx.com
地址,使用阿波罗管理员账号登录阿波罗控制台。
创建新项目:在阿波罗控制台中,点击左侧导航栏中的“AppList”,然后点击“Create App”按钮,在弹出的对话框中填写应用程序名称、所属集群、所属命名空间等信息,并点击“Create”按钮创建新项目。
添加配置项:进入新创建的项目页面后,点击右侧的“Namespace List”标签页,然后选择需要添加配置项的命名空间。在命名空间页面中,点击“Add Item”按钮,填写配置项的 Key 和 Value,并选择该配置项所属的环境(如 dev、test、prod 等)和版本号。
下载客户端库:在阿波罗控制台中,点击右上角的“Portal”菜单,进入开发者门户网站。在网站中,选择对应的编程语言和框架,然后下载对应的客户端库(例如,Java + Spring Boot 应用程序需要下载 apollo-client
客户端库)。
集成客户端库:将下载好的客户端库引入应用程序的依赖中,然后在应用程序中添加连接阿波罗的配置信息,并使用客户端库从阿波罗获取配置信息。例如,在 Spring Boot 应用程序中,可以在 bootstrap.yml
文件中添加以下配置信息:
yaml
spring:
application:
name: your-application-name
profiles:
active: dev
apollo:
meta: http://apollo-config-server-url
bootstrap:
enabled: true
其中,your-application-name
是应用程序的名称,dev
是配置环境的名称。http://apollo-config-server-url
是阿波罗的配置服务 URL。
6.启动应用程序:将集成了 Apollo 的应用程序打包并启动,通过日志和控制台输出可以查看到应用程序从阿波罗获取配置信息的情况。
以上就是创建一个单独的 Apollo 项目的流程,需要注意的是在实际应用中还需根据具体情况进行调整和优化。
name = qqqqqqqqqqqqqqqqqqqqqqqqqqqqq
server.port = 8081
spring.application.name = fqdemo4
spring.profiles.active = uat
spring.cloud.consul.host = 192.168.102.20
spring.cloud.consul.port = 8500
spring.cloud.enabled = true
spring.cloud.consul.discovery.enabled = true
spring.cloud.consul.discovery.hostname = 127.0.0.1
spring.cloud.consul.discovery.register = true
spring.cloud.consul.discovery.deregister = true
spring.cloud.consul.discovery.prefer-ip-address = true
spring.cloud.consul.discovery.instance-id = ${spring.application.name}
spring.cloud.consul.discovery.service-name = ${spring.application.name}
spring.cloud.consul.discovery.health-check-url = http://${spring.cloud.consul.discovery.hostname}:${server.port}/
package com.springboot.demo.webdemo;
import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
@EnableDiscoveryClient
@EnableApolloConfig
public class WebDemoApplication {
public static void main(String[] args) {
SpringApplication.run(WebDemoApplication.class, args);
}
#apollo的变量获取
@GetMapping("/")
@Value("${name}")
public String hello(@RequestParam(value = "name", defaultValue = "${name}") String name) {
return String.format("Hello %s!", name);
}
}
package com.springboot.demo.webdemo.controller;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
@RestController
@RequestMapping("/hello")
public class HelloWorldController {
@GetMapping
public String hello(){
return "hello SpringBoot 搭建成功啦";
}
}
package com.springboot.demo.webdemo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
@RestController
@RequestMapping("/employee")
public class EmployeeController {
@GetMapping
public HashMap index(){
HashMap hashmap = new HashMap();
hashmap.put("姓名", "王二");
hashmap.put("年龄", "27");
hashmap.put("工龄", "6");
return hashmap;
}
}
-Dapp.id=156 -Dapollo.meta=http://config.uat.bdata.api.fjf -Denv=uat -javaagent:pinpoint-agent-2.3.3/pinpoint-bootstrap.jar -Dpinpoint.applicationName=fanqiang.uat
修改name变量,无需重启项目
本文介绍了如何在 Spring Boot 中集成阿波罗,并详细说明了其原理和优势。通过使用阿波罗,可以轻松管理多个环境的配置信息,实现配置管理、版本控制、灰度发布等功能。同时,本文还给出了集成阿波罗的最佳实践,希望能够对开发者和运维在实际项目中使用阿波罗提供一些参考和帮助。
参考文档:
https://www.cnblogs.com/mrhelloworld/p/apollo1.html
spring cloud apollo 配置中心 - 掘金
Spring Boot 集成 Apollo 配置中心,真香、真强大!_51CTO博客_apollo集成springcloud