# 一、框架搭建环境
````
- 编译器:IDEA 2018.1.5
- Maven:3.3.9
- JDK:1.8.0_144
- 系统:Win 10
````
# 二、开发框架
Spring Boot 2.0(2.0.4)
```
1. 新增特性
2. 代码重构
3. 配置变更
```
```
http://spring.io
https://github.com/spring-projects/spring-boot/wiki可查看发布日志
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Configuration-Changelog查看配置的改变
```
# 三、maven使用办法
## 1. 拷贝maven仓库至本地环境(默认仓库位置/自定义位置)
## 2. 准备maven环境
- 本机安装maven环境
```
配置maven中仓库的位置(默认/自定义配置)
```
- 本机可以不用安装maven环境(Linux中方法同)
```
(1)将maven压缩包放到某个目录下"E:/apache-maven-3.5.2-bin.zip"
(2)编辑项目中的.mvn/wrapper/maven-wrapper.properties
(3)distributionUrl设为第二步设置的目录"E:/apache-maven-3.5.2-bin.zip"
```
# 四、配置中心gis-configcenter组件结构
- gis-eureka-server
- gis-config-server、gis-config-server-ui
- gis-config-client
- microservice-config-client-refresh(仅测试消息总线用)
- gis-config-clientexec(独立可执行程序用于从服务器拉取配置信息修改wss配置文件)
## 1. 配置中心服务组件启动顺序
项目源码使用模块编程,client端注册到了eureka服务端,所以启动项目应该也要启动eureka的服务端。
然后再启动config服务端,最后启动config-client端,启动config-client要使用profile方法启动。
1. gis-eureka-server
2. gis-config-server、gis-config-server-ui
3. gis-config-client(Spring Cloud Config Client)(暂不用)
4. gis-config-clientexec
## 2. 端口
1. eureka-server:8761
2. config-server:7070
3. config-server-ui:7071
4. config-client:8080
测试:
1. http://localhost:8761
2. 查看服务的配置信息
```
- http://localhost:7070/mswss-146/dev
- http://localhost:7070/mswss-146-dev.properties
- http://localhost:7070/mswss-146-dev.json
- http://localhost:7070/mswss-146-dev.yml
- http://localhost:7070/mswss-157/prod
- http://localhost:7070/mswss-157-prod.properties
- http://localhost:7070/mswss-157-prod.json
- http://localhost:7070/mswss-157-prod.yml
```
3. http://localhost:8080/testhello/redis_server_port
4. 修改配置-->/bus-refresh
5. http://localhost:8080/testhello/redis_server_port已获取最新配置信息
# 五、build - 打包
## 1. IDEA界面
## 2. 命令行
```
1 进入项目
2 mvn clean package或mvn clean install
```
# 六、run - 启动、停止
## 1. 启动
将jar包上传到指定服务器上,采用 java -jar *.jar 的方式
linux下可以通过nohup或者supervisor(推荐)进行启动,启动命令中建议加入spring.profiles.active参数,指定使用生产环境的配置,该配置可以application-prod.properties中指定
使用prod模式时,日志文件会自动输出到当前目录的logs文件中,可通过```tail -100f logs/gis-frame.log```进行查看
- nohup java -jar target/xxxx.jar > /dev/null 2>&1 &
- nohup java -jar -Dspring.profiles.active=prod target/xxxx.jar > console.file 2>&1 &
## 2. 停止
- ps -ef|grep eureka
- kill进程以停止服务
# 七、配置文件约定
配置文件使用本地存储模式,且独立于配置中心服务端,以支持配置中心服务端能自动读取本地仓库最新的配置信息供客户端获取使用。
使用模式
## 1. 镜像方式(一般使用该方式)
```
- 1 准备配置文件数据
- 2 固定配置文件本地仓库路径为/var/config-center/config-repo
- 3 配置中心服务端application.properties文件中spring.cloud.config.server.native.search-locations属性指定该路径
- 4 镜像制作
* 4.1 创建配置配置文件本地仓库路径
- 4.2 添加配置文件到本地仓库
- 4.3 添加配置中心服务端
* 4.4 启动配置中心服务端
- 5 交付配置中心服务端Docker镜像
```
## 2. Linux环境
```
- 1 准备配置文件数据
- 2 固定配置文件本地仓库路径为/var/config-center/config-repo
- 3 配置中心服务端application.properties文件中spring.cloud.config.server.native.search-locations属性指定该路径
- 4 自行检测、创建本地仓库,并上传配置文件信息
- 5 启动配置中心服务端
```
## 3. Windows环境
```
- 1 准备配置文件数据
- 2 自定义配置文件本地仓库路径,并上传配置文件信息
- 3 配置中心服务端application.properties文件中spring.cloud.config.server.native.search-locations属性指定该路径
- 4 启动配置中心服务端
```
当Config Server启动后,如果配置发生了修改,微服务也应该实现配置的刷新。
# 八、动态刷新Config Client配置
## 1. rabbitmq安装
最方便的是运行rabbitmq镜像实例。
```
0. docker pull rabbitmq:3.7.7-management
1. 准备镜像:rabbitmq:3.7.7-management.tar
2. 运行容器:docker run -d --name rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 25672:25672 -p 15671:15671 -p 15672:15672 reg.gisnci.com/mirrors-opensource/rabbitmq:3.7.7-management
3. 容器启动之后就可以访问web 管理端了——http://宿主机IP:15672,默认创建了一个 guest 用户,密码也是 guest。
目前使用K8S集群失败,使用56.213上的独立docker部署:
1.进入56.213
2.docker container start 8931bb67f095
3.访问http://192.168.56.213:15672
```
## 2. 单点手动动态刷新Config Client配置(/actuator/refresh)
给客户端发送执行刷新的命令:
```
- 使用Postman发送POST请求:http://localhost:8080/actuator/refresh
- 使用终端发送POST请求:curl -X POST http://localhost:8080/actuator/refresh
```
刷新后客户端再获取就是更新后的数据了。
## 3. Config Client配置信息实时刷新-Spring Cloud Bus(/actuator/bus-refresh)
使用rabbitmq消息中间件产品来增强刷新机制,解决多台配置客户端自动刷新配置问题。
Spring Cloud Bus做配置更新步骤如下:
- 在服务端触发POST请求给/actuator/bus-refresh
- Config Server端接收到请求并发送给Spring Cloud Bus
- Spring Cloud Bus接到消息并通知给其它客户端
- 其它客户端接收到通知,请求Server端获取最新配置
- 全部客户端均获取到最新的配置
```
安装erlang、rabbitmq(Windows测试:Erlang 19.3,rabbitmq 3.7.7)
guest guest账户访问rabbit:http://localhost:15672/
使Config Server端支持/actuator/bus-refresh即可
- 增添依赖
- 增加配置
- 使用Postman向服务端发送POST请求:http://localhost:7070/actuator/bus-refresh
- 使用终端向服务端发送POST请求:curl -X POST http://localhost:7070/actuator/bus-refresh
```
## 4. 测试
```
http://192.168.55.111:8761/ 查看注册中心
http://192.168.55.111:7070/mswss-146/dev 查看mswss-146-dev.properties配置
http://192.168.55.111:8080/testhello/redis_server_port 获取客户端1的某配置
http://192.168.55.111:8081/redis_server_port 获取客户端2的某配置
修改配置信息
http://localhost:7070/actuator/bus-refresh 发送POST消息
http://192.168.55.111:8080/testhello/redis_server_port 获取客户端1的更新的某配置
http://192.168.55.111:8081/redis_server_port 获取客户端2的更新的某配置
```
# 九、健康状态检测
给客户端发送执行健康状态检测的命令:
```
- 使用Postman发送GET请求:http://localhost:8080/actuator/health
- 使用终端发送GET请求:curl -X GET http://localhost:8080/actuator/health
```
# 十、知识点记录
## 10.1 Config Client的Controller编写规则
每个Controller类和其内部的方法都要编写详细的API说明,且要做到配置和逻辑分离。interface+implements,注解和注释写在interface中。
可参考gis-config-client.
## 10.2 Spring Cloud Config简介
- Config Server可横向扩展、集中式的配置服务器,集中管理应用程序各个环境下的配置;
- Config Client是Config Server的客户端,用于操作存储在Config Server中的配置