龙空技术网

springboot调用k8s配置中心apollo-含源码

小夸大夸 306

前言:

如今各位老铁们对“java整合apacheapollo”都比较看重,兄弟们都需要分析一些“java整合apacheapollo”的相关内容。那么小编在网络上汇集了一些对于“java整合apacheapollo””的相关文章,希望朋友们能喜欢,我们快快来了解一下吧!

本文开放源码。之前的文章说了如何在k8s构建apollo及用Ingress配置了portal页面,需要了解的朋友可以打开文章中心或者跳到下面观看:

本文将演示如何集成配置中心apollo config的ingress及创建一个springboot项目调用k8s里面的apollo,获取配置中心的值,切换环境,并在apollo的portal页面进行增加、修改、回滚等操作。

apollo操作页面

一、创建客户端要连接的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

依次创建就可以。创建成功如下:

config创建ingress成功页面

二、配置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