前言:
如今各位老铁们对“java整合apacheapollo”都比较看重,兄弟们都需要分析一些“java整合apacheapollo”的相关内容。那么小编在网络上汇集了一些对于“java整合apacheapollo””的相关文章,希望朋友们能喜欢,我们快快来了解一下吧!本文开放源码。之前的文章说了如何在k8s构建apollo及用Ingress配置了portal页面,需要了解的朋友可以打开文章中心或者跳到下面观看:
本文将演示如何集成配置中心apollo config的ingress及创建一个springboot项目调用k8s里面的apollo,获取配置中心的值,切换环境,并在apollo的portal页面进行增加、修改、回滚等操作。
一、创建客户端要连接的config服务的Ingress文件
因我们的apollo集群是部署在k8s里面的,所以我们访问里面的服务需要用Ingress来映射。ingress是一个API对象,ingress通过http或https暴露集群内部service,依靠ingress-controller给service提供外部URL、负载均衡、SSL/TLS能力以及基于host的反向代理。
创建了3个环境,3个环境对应的ingress文件为:
apiVersion: extensions/v1beta1kind: Ingressmetadata: name: zizai-apollo-client-dev namespace: zizaispec: rules: - host: zizai-apollo-client-dev.test.thinkinpower.net http: paths: - path: / backend: serviceName: service-apollo-meta-server-dev servicePort: 8080---apiVersion: extensions/v1beta1kind: Ingressmetadata: name: zizai-apollo-client-test namespace: zizaispec: rules: - host: zizai-apollo-client-test.test.thinkinpower.net http: paths: - path: / backend: serviceName: service-apollo-meta-server-test-alpha servicePort: 8080---apiVersion: extensions/v1beta1kind: Ingressmetadata: name: zizai-apollo-client-prod namespace: zizaispec: rules: - host: zizai-apollo-client-prod.test.thinkinpower.net http: paths: - path: / backend: serviceName: service-apollo-meta-server-prod servicePort: 8080
依次创建就可以。创建成功如下:
二、配置Ingress域名nginx配置
Ingress配置了域名,要从外面访问入去,我们用nginx进行了转发。配置如下:
//zizai-apollo-client-dev.test.thinkinpower.net.confserver { listen 80; server_name zizai-apollo-client-dev.test.thinkinpower.net; access_log /data/logs/nginx/zizai-apollo-client-dev.test.thinkinpower.net.access.log main; error_log /data/logs/nginx/zizai-apollo-client-dev.test.thinkinpower.net.error.log; root /data/webapps/zizai-apollo-client-dev.test.thinkinpower.net/test/static; index index.html index.htm; client_max_body_size 50m; location / { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass ; # 指向集群的 }}//zizai-apollo-client-test.test.thinkinpower.net.confserver { listen 80; server_name zizai-apollo-client-test.test.thinkinpower.net; access_log /data/logs/nginx/zizai-apollo-client-test.test.thinkinpower.net.access.log main; error_log /data/logs/nginx/zizai-apollo-client-test.test.thinkinpower.net.error.log; root /data/webapps/zizai-apollo-client-test.test.thinkinpower.net/test/static; index index.html index.htm; client_max_body_size 50m; location / { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass ; # 指向集群的 }}//zizai-apollo-client-prod.test.thinkinpower.net.confserver { listen 80; server_name zizai-apollo-client-prod.test.thinkinpower.net; access_log /data/logs/nginx/zizai-apollo-client-prod.test.thinkinpower.net.access.log main; error_log /data/logs/nginx/zizai-apollo-client-prod.test.thinkinpower.net.error.log; root /data/webapps/zizai-apollo-client-prod.test.thinkinpower.net/test/static; index index.html index.htm; client_max_body_size 50m; location / { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass ; # 指向集群的 }}
这样就可以在外面访问了。可以通过域名直接访问了看注册中心Eureka,例如:我的开发环境为如下图所示:
打开
zizai-apollo-client-dev.test.thinkinpower.net
三、创建springboot项目
下面创建一个springboot项目进行访问apollo的键值。
1、用idea创建一个springboot项目
(1)新建项目
(2)如下图选择项目
再下一步,选择jdk8
再下一步,就可以完成项目的创建
(3)引入maven包
可以进入,进行搜索。本文软件包的链接为:
本文用的是最新的版本。
如下放入maven的文件即可以。
<dependency> <groupId>com.ctrip.framework.apollo</groupId> <artifactId>apollo-client</artifactId> <version>1.7.0</version> </dependency>
具体的pom.xml为:
<?xml version="1.0" encoding="UTF-8"?><project xmlns="; xmlns:xsi="; xsi:schemaLocation=" ;> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.1</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.apollo.yaokj</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.ctrip.framework.apollo</groupId> <artifactId>apollo-client</artifactId> <version>1.7.0</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build></project>
(4)创建controller文件
import org.springframework.beans.factory.annotation.Value;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class DemoController { @Value("${timeout:100}") private int timeout; @RequestMapping("/getValue") public String getValue(){ return "get value is: " + timeout; }}
(5)修改application.properties文件
spring.application.name=demoserver.port=8989#AppId是应用的身份信息,是配置中心获取配置的一个重要信息。app.id=zizai-community-apiapollo.meta=zizai-apollo-client-dev.test.thinkinpower.net#apollo.meta=zizai-apollo-client-test.test.thinkinpower.net#apollo.meta=zizai-apollo-client-prod.test.thinkinpower.net#在应用启动阶段,向Spring容器注入被托管的application.properties文件的配置信息。apollo.bootstrap.enabled=true#将Apollo配置加载提到初始化日志系统之前。apollo.bootstrap.eagerLoad.enabled=true#调整 controller 包的 log 级别,为了后面演示在配置中心动态配置日志级别。logging.level.com.gf.controller=debug# 指定apollo配置缓冲路径,默认为 linux: /opt/data/{appId}/config-cache Windows: C:\opt\data\{appId}\config-cache# apollo.cacheDir=/opt/data/some-cache-dir#设置集群#apollo.cluster=SomeCluster#设置apollo里的namespace,#apollo.bootstrap.namespaces: application
具体的选项看里面的注释。
注意:app.id=zizai-community-api里的值和portal里面的应用id必须一致。apollo.meta=zizai-apollo-client-dev.test.thinkinpower.net的值为config里的访问链接。
如:
和下面的是一致的
(6)环境配置
因为本文的apollo是部署在k8s的,在用Idea测试的时候必须要配置下面2个变量,不然会失败,获取不到值。
env: 应用使用 Apollo 哪个环境,设置为 DEV 为开发环境,设置为 PROD 是生产环境。apollo.configService: 配置中心的地址,在本地Idea跑代码时,指定 meta 地址无效。因为 Apollo 是部署在 k8s 中,需要在启动时,将configService 和 meta 的值保持一致。
所以在Idea启动的时候,如果是开发环境要加上:
-Dapollo.configService= -Denv=DEV
如果是 java 命令启动
$ java -Dapollo.configService= -Denv=DEV -jar apollo-demo.jar
Idea的配置如图:
这样就可以拿到值了。
四、测试及演示
1、登录apollo的portal设置值
timeout设置为400。
2、启动springboot项目,访问值
(1)启动项目后,会看到拉配置中心的值
访问下面url获取值
返回:400,和portal里配置的一致
(2)修改timeout的值为4000
点击发布
可以看到项目日志,会获取到值
调接口,获取值为4000,和portal里配置的一致
切换环境的操作也是一样,不再详细说明。
五、源码
链接:
提取码:ouuy
标签: #java整合apacheapollo