前言:
微服务架构中springcloud config的优点我在这就不在赘述了。
1、搭建kafka服务。我在自己买的云服务器上使用docker搭建了一个kafka单节点服务,详见上两篇博客《docker 安装zookeeper+kafka单节点》和《腾讯云上docker安装kafka单节点问题记录》。
2、新建eureka的server端工程。
maven依赖如下:
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
配置文件添加配置
#eureka服务器要监听的端口
server.port=8761
#eureka服务端服务名
spring.application.name=naom-eurekaServer-service
eureka.instance.hostname=localhost
eureka.instance.prefer-ip-address=true
#eureka服务访问路径
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
#不要使用eureka服务进行注册
eureka.client.registerWithEureka=false
#不要在本地缓存注册表信息
eureka.client.fetchRegistry=false
3、新建springcloud config服务端工程
添加依赖
org.apache.kafka
kafka-streams
org.springframework.cloud
spring-cloud-bus
org.springframework.cloud
spring-cloud-starter-bus-kafka
org.springframework.cloud
spring-cloud-starter-stream-kafka
org.springframework.cloud
spring-cloud-config-server
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.boot
spring-boot-starter-actuator
application.properties配置文件内容如下:
#springcloud配置中心端口号
server.port=9090
#配置中心服务端服务名
spring.application.name=naom-configServer-service
##配置中心的GitHub远程地址
spring.cloud.config.server.git.uri=https://github.com/luweiGh/config-git.git
#GitHub用户名
spring.cloud.config.server.git.username=lu***
#GitHub密码
spring.cloud.config.server.git.password=*****
#---------------------eureka配置开始--------------------
#eureka服务位置
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
#注册服务的IP,而不是服务器名称
eureka.instance.prefer-ip-address=true
#向eureka服务注册服务
eureka.client.register-with-eureka=true
#拉去注册表的本地副本
eureka.client.fetch-registry=true
#---------------------eureka配置结束--------------------
新增bootstrap.properties文件,并添加配置
#springcloud kafka配置
#kafka服务端链接
spring.kafka.bootstrap-servers=http://111.**.345.12:9092
#kafka消息topic
spring.kafka.consumer.group-id=springcloudConfig
#Spring boot actuator所有端点启用
management.endpoints.web.exposure.include=*
#springcloud bus动态刷新开启
spring.cloud.bus.refresh.enabled=true
4、新建springcloud config客户端工程
添加依赖
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-config
org.springframework.cloud
spring-cloud-starter-bus-kafka
org.springframework.cloud
spring-cloud-starter-stream-kafka
org.apache.kafka
kafka-streams
org.springframework.cloud
spring-cloud-bus
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.cloud
spring-cloud-starter-netflix-hystrix
org.springframework.cloud
spring-cloud-starter-netflix-hystrix-dashboard
org.springframework.cloud
spring-cloud-starter-openfeign
org.springframework.boot
spring-boot-starter-actuator
org.springframework.boot
spring-boot-actuator-autoconfigure
application.properties配置文件内容如下:
#消息服务的监听端口
server.port=8081
#配置中心服务端服务名
spring.application.name=naom-message-service
#---------------------eureka配置开始--------------------
#eureka服务位置
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
#注册服务的IP,而不是服务器名称
eureka.instance.prefer-ip-address=true
#向eureka服务注册服务
eureka.client.register-with-eureka=true
#拉去注册表的本地副本
eureka.client.fetch-registry=true
#---------------------eureka配置结束--------------------
新增bootstrap.yml文件,并添加配置
#---------------------springCloud config配置开始---------------
#springCloud服务端的服务名
spring:
cloud:
config:
#springcloud服务端的链接
uri: http://localhost:9090/
#文件环境(生产、测试、生产等)
profile: dev
#master分支
label: master
#
name: naom-configServer-service
#开启spring cloud bus
bus:
refresh:
enabled: true
#kafka服务端
kafka:
bootstrap-servers:
- 111.229.89.171:9092
#暴露Spring boot actuator所以端点
management:
endpoints:
web:
exposure:
include: '*'
新建controller测试类
package com.naom.message.controller;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
//一定别忘了这个哦
@RefreshScope
public class SpringConfigTestController {
@Value("${brach}")
private String brach;
@RequestMapping(value = "getSpringCloudConfigMsg")
public String getSpringCloudConfigMsg(){
String configMsg = "在config服务端拿到的brach为"+brach;
return configMsg;
}
}
5、进行动态刷新测试
查看我的GitHub中提前建好的文件
分别启动eureka服务端、springcloud config服务端、springcloud config客户端,访问springcloud config客户端的测试controller。
现在我修改GitHub中该文件的内容
在postman中调用springcloud config服务端的actuator/bus-refresh
接着访问springcloud config客户端的测试controller,结果返回结果就发生了变化。
小结:
我们各个微服务的一些配置交给config服务端管理,修改Git仓库的配置。只需要调用spring boot actuator的refresh接口,所有的微服务的配置都动态发生了变化。