springcloud集成apollo

2023-11-18

apollo 配置中心,官网 Apollo,官网有设计,部署说明。

系统架构图

github开源官网https://github.com/apolloconfig/apollo/releases

releases上下载后发现有这4个文件

apollo-adminservice-1.9.2-github  apollo-configservice-1.9.2-github  apollo-portal-1.9.2-github  apollo-quick-start-1.9.2

quick-start是本机搭建测试用,这个不用管他。

实际我们用到的是apollo-adminservice-1.9.2-github  apollo-configservice-1.9.2-github  apollo-portal-1.9.2-github

参考上面的架构图

apollo-portal-1.9.2-github就是客户端页面,用来增删改查配置项的

apollo-adminservice-1.9.2-github 这个是portal的服务端,portal远程调用它

apollo-configservice-1.9.2-github 其实是三合一,就是配置中心的服务端config service和微服务注册中心eureka,服务发现meta server。

另外配置中心的客户端,也就是我们需要集成到项目中的,添加依赖即可。

<dependency>

<groupId>com.ctrip.framework.apollo</groupId>

<artifactId>apollo-client</artifactId>

<version>1.8.0</version>

</dependency> 

部署指南

分布式部署指南 · apolloconfig/apollo Wiki · GitHub

mysql下载

MySQL :: Download MySQL Community Server (Archived Versions)

Apollo1.9.2 百度网盘分享

百度网盘 请输入提取码

搭建步骤:

我这里使用了apollo 1.9.2这个版本,目前搭建的是单机版,需要集群的话,多搭几台服务器

数据库mysql需要5.6以上,发现使用5.1的执行数据库脚本会报错,因为脚本用了timestamp,删除timestamp,发现站点也启动不了

1.登录Mysql后  mysql -u root -p  执行数据库脚本

没有脚本的话,将开源项目下载下来,在script/sql文件夹

mysql>source /usr/local/apollo/apollo-quick-start-1.9.2/sql/apolloconfigdb.sql

mysql>source /usr/local/apollo/apollo-quick-start-1.9.2/sql/apolloportaldb.sql

2.更改配置启动各个服务和站点

cd到

apollo-configservice-1.9.2-github  

apollo-adminservice-1.9.2-github

apollo-portal-1.9.2-github这3个目录

先将config里面application-github.properties里面数据库链接改成自己mysql数据库链接

再将scripts文件夹里面授权

chmod 777 startup.sh

chmod 777 shutdown.sh

依次启动各个服务

apollo-configservice-1.9.2   (配置中心服务端,metaserver及eureka注册中心 三合一, 端口号 8080,可以到startup.sh里面更改 )

apollo-adminservice-1.9.2  (后台管理服务端,也会注册到eureka,端口号8090 )

apollo-portal-1.9.2 (后台管理客户端页面,增删改查配置,端口号8070)

./startup.sh启动

启动后即可访问后台管理客户端页面站点portal,这里假设是部署在本机127.0.0.1,改成你们自己的服务器ip地址。

http://127.0.0.1:8070

初始密码apollo/admin

注册中心

http://127.0.0.1:8080

portal后台

http://127.0.0.1:8090

3.springboot集成apollo客户端

3.1 pom.xml新增apollo客户端依赖

<dependency>
    <groupId>com.ctrip.framework.apollo</groupId>
    <artifactId>apollo-client</artifactId>
    <version>1.9.2</version>
</dependency>

3.2 application.properties新增

#apollo相关配置   开始#
# 与Apollo Portal上面创建的app id保持一致
app.id=unpoint
# 项目启动时需要添加启动参数 -Denv=DEV 来指定 apollo环境
# 就是apollo config server的地址,改成实际apollo部署ip地址
apollo.meta=http://127.0.0.1:8080
# 是否开启 Apollo
apollo.bootstrap.enabled=true
apollo.bootstrap.namespaces=application
apollo.cacheDir= ./apollo/config
# 刷新时间,单位:分钟,默认5
apollo.refreshInterval=5
#对应apollo配置中心环境
env=DEV
#apollo相关配置 结束#

3.3 指定虚拟机参数

如果是在idea或者eclipse调试,那么需要增加虚拟机参数VM options新增,这里是测试环境选了DEV,生产需要另外改,apollo.configService是配置中心地址,如果不指定,部署在外网就有可能使用外网服务器的内网地址访问造成,连接超时的情况。目前是单机测试,如果是集群,那么需要改成负载中心的地址。本机测试使用127.0.0.1

-Denv=PRO -Dapollo.configService=http://127.0.0.1:8080

生产部署时写脚步,指定参数这么写:

java  -Denv=PRO  -Dapollo.configService=http://127.0.0.1:8080 -jar xxx.jar

参数名称注意有区别:

apollo.config-service(1.9.0+) 或者 apollo.configService(1.9.0之前)

参考:

Apollo分布式部署指南

3.4 写个controller来测试

package com.figo.demo.controller;


import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@RestController
public class TestRestController {
    @Value("${test}")
    String test;

    @RequestMapping("/testAppolo")
   public String testApollo(HttpServletRequest request, HttpServletResponse response)
   {
       return test;
   }
}

这个test就是在apollo配置中心新增的,

修改之后记得点发布,目前测试下来,发布后客户端能实时更新到最新的值,但是发现其实会自动重启demo这个应用的。根据官方文档,配置中心portal调用admin-service修改配置后,没有通过mq通知config-service,按照官方说法是尽量少引入第三方组件,config-service每秒轮询检查是否有配置更新,有更新,再通过长链接发送到客户端client的,1.7.1版本发现客户端会重启应用来更新本地properties,而1.9.2版本不会重启应用,客户端会下载一份备份properties到本地,如果连接不上服务端,会使用本地的配置文件。

比如上面配置文件设置apollo.cacheDir= ./apollo/config

本地开发会发现本地缓存在

里面的值是: 

#Persisted by DefaultConfig
#Thu Nov 03 17:11:31 CST 2022
test=hello,world\uFF0Chello,china\! one world,one dream\!

就是apollo配置的属性。

访问后本地能获取apollo远程配置的属性。

如果需要部署多台,那么数据库改一下,apolloconfigdb里面的serviceconfig表,eureka.service.url,value值设置多个,用英文逗号分隔。本机测试用localhost,非本机改成实际的ip

 参考:微服务架构~携程Apollo配置中心架构剖析

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

springcloud集成apollo 的相关文章

随机推荐