概述
当有很多个微服务的时候,不同的微服务有不一样的配置,一个个去配置这些微服务的配置文件,也就是springboot的配置文件非常的麻烦,将配置放到git仓库当中,使用配置中心微服务去读取git仓库中的配置文件
案例——配置分布式中心
1.码云上配置一个仓库,创建一个application-profile文件
user-dev.yml为在厂库中创建的微服务远程配置文件,配置文件的格式:application-profile
application:应用名称
profile:环境类型dev是开发环境,prod是生产环境
2.创建配置中心微服务
2.1.添加依赖
说明:eureka客户端依赖和配置中心服务依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
2.2.在启动类上添加配置中心注解@EnableConfigServer
@SpringBootApplication
@EnableConfigServer
public class ConfigApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigApplication.class,args);
}
3.在微服务项目中创建配置文件application.yml配置git厂库地址
server:
port: 12000
spring:
application:
name: config-server
cloud:
config:
server:
git:
#码云上配置文件的的地址
uri: https://gitee.com/alexyuan666/mylearnrepository.git
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
4.改造eureka中服务生产者,将application.yml删除改为bootstap.yml,在此文件中配置厂库地址
spring:
cloud:
config:
# 要与仓库中的配置文件的application保持一致
name: user
# 要与仓库中的配置文件的profile保持一致
profile: dev
# 要与仓库中的配置文件所属的版本(分支)一样
label: master
discovery:
# 使用配置中心
enabled: true
# 配置中心服务名
service-id: config-server
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
依次启动注册中心,配置中心,生产者、网关和消费者微服务,查看接口是否正常,正常则配置文件生效
以上案例产生的问题
配置文件是放在git厂库中统一管理了,但是在修改git中配置文件不重启微服务的情况下微服务是否能及时生效最新的配置。答案是不能。
解决微服务git仓库配置文件不能立即生效问题——springcloud bus教程
概述:springcloud bus是轻量级的消息代理将分布式的节点连接起来,可以用于广播配置文件的更改或者服务的监控管理。消息总线可以作为微服务的监控,也可以实现应用程序之间的通信。springcloud bus 可选的消息队列有rabbit mq和kafka。
说明:当git文件中的配置信息改变,发送一个http请求到配置中心,RabbitMq监测到配置文件的改变会通知对应的服务进行配置更新,服务在配置中心获取到配置文件完成更新。
引入springcloud bus的实现步骤
1.在cofig配置文件中添加springcloud bus依赖,包含rabbitmq依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-bus</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-rabbit</artifactId>
</dependency>
2.在config微服务配置文件中设置rabbitmq
rabbitmq:
port: 5672
host: 192.168.15.128
username: yuanlong
password: yuanlong
注意:
- mq要自己搭建,可以访问到mq主页
- 在mq中配置新的队列,不然连接可能出现问题
- 创建用户需要授予权限,不然连接不上
3.设置配置文件有更新通知config中心的路劲
management:
endpoints:
web:
exposure:
# 前端发送配置更新的信息的url地址
include: bus-refresh
4.改造配置文件在git厂库中的微服务
4.1 引入下列依赖,包含bus、rabbit、springboot启动执行依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-bus</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-rabbit</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
4.2在接口中添加刷新配置注解@RefreshScope
@RestController
@RequestMapping("/testserver")
@RefreshScope //刷新配置
public class TestController {
@Value("${test.name}")
String name;
@GetMapping("/{id}")
public User getUser(@PathVariable Integer id){
User user=new User();
user.setAge(id);
user.setName("test");
System.out.println("是否有改变——————>"+name);
System.out.println("调用的服务ID"+id);
return user;
}
}
总结
配置文件中心也是一个微服务,主要功能是统一管理不同微服务的配置文件,配置文件让在git仓库中,配置中心从git仓库中获取配置文件应用到对应的微服务中,由于配置生效需要重启微服务,引入消息总线springcloud bus监听配置更新和各个微服务,将配置修改需要重新加载的信息发送给指定微服务。