12.1 config 是什么
Spring Cloud Config为分布式系统中的外部配置提供服务器和客户端支持
微服务面临问题?
微服务把单一服务拆成一个一个的子服务,每个服务粒度相对较小。在系统种会出现大量的服务。由于每个服务都需要必要的配置文件。
一套集中式。 动态配置的设施。
成百上千。。。。
Springcloud config 为微服务架构种的微服务提供集中化的外部配置支持。 配置服务器为各个不同的微服务应用的所有环境提供了一个中心化的配置。
12.2 config 能干什么
集中管理配置文件
在不同的环境配置。 动态的配置更新。 分环境 dev test prod
在运行期间动态调整配置。 动态调整tomcat 线程池
当配置文件发生了改变的时候。 服务不需要重新启动
将配置信息以rest接口进行暴漏 动态访问刷新机制
12.3 config 怎么玩
读取配置规则:
mater config-dev.yml
/{lable}/{application}-{profile}.yml 最多
/{application}-{profile}.yml
/{application}/{profile}/{lable}
label : 分支 branch
name 服务名字
profile: 环境 dev test prod
动态刷新:
-
以config服务端请求配置文件
http://localhost:3344/master/config-dev.yml
server:
port: 3344
spring:
application:
name: cloud-config-server #注册到eureka
cloud:
config:
server:
git:
uri: https://gitee.com/wubojin/springcloud-config.git
# 搜索目录
search-paths:
- springcloud-config
label: master
rabbitmq:
port: 5672
username: guest
password: guest
host: localhost
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka/
#暴露监控的端点
management:
endpoints:
web:
exposure:
include: "bus-refresh"
-
pom 引入 actruator 监控
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
-
修改yml 暴露监控端口
#暴露监控的端点
management:
endpoints:
web:
exposure:
include: "*"
- @RefreshScope 添加注解请求端
@RefreshScope
@RestController
@Slf4j
public class ConfigController {
@Value("${config.info}")
private String configInfo;
@GetMapping("configInfo")
public String getConfig(){
return configInfo;
}
}
- 手动的刷新 post 请求cmd
crul -X POST http://localhost:3355/actuator/refresh
弊端:
加入说 有很多微服务 都要刷新 比如说有 3355 3366 3377 3388 等等。。。
每个微服务都要手动刷新嘛
可不可以一次广播处处生效刷新
我们就像要大范围率先你。 自动刷新功能。。
十三、SpringCloud Bus 消息总线
13.1是什么
Spring Cloud Bus将分布式系统的节点与轻量级消息代理链接。这可以用于广播状态更改(例如配置更改)或其他管理指令。一个关键的想法是,Bus就像一个扩展的Spring Boot应用程序的分布式执行器,但也可以用作应用程序之间的通信渠道。当前唯一的实现是使用AMQP代理作为传输,但是相同的基本功能集(还有一些取决于传输)在其他传输的路线图上。
Springcloud bus 配合 Spring Cloud config 使用 可以实现配置的动态刷新。
Spring cloud bus 目前只支持Rabbitmq 和 Kafka 。
13.2能干什么
Spring cloud bus 能管理和传播分布式系统的消息。 就像一个执行器 广播状态 事件推送等 。也可以当作微服务 的通信通道 .
什么是总线?
在微服务架构种。 通常会使用轻量级消息代理来构建一个共用消息主题。
系统种的所有微服务实例都链接上来。 由于该主题产生的消息会被素有的实例监听和消费,所以被称为消息总线。
原理。
13.3怎么玩
- 利用消息总线出一个一个客户端 /bus/refresh 从而刷新
- 利用消息总先触发一个服务端configserver 的/bus/refresh 端点。 从而刷新客户端配置
哪一个刚加合适?
第二种。
因为第一种打破了为微服务的职责单一性。 微服务本身是一个业务模块。 它本不应该承担刷新配置的职责
打破微服务各个节点的对等性
又一定的局限性。 在网络迁移时 网络地址会发生变化。 此时如果像自动刷新就会增加更多配置。
13.3.1创建 cloud-config-client3366
13.3.2 pom.xml 引入ampq 配置文件
<!--添加消息总线RabbitMQ支持-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
13.3.3 配置yml
rabbitmq:
port: 5672
username: guest
password: guest
host: localhost
13.3.4 暴露端点
#暴露监控的端点
management:
endpoints:
web:
exposure:
include: "*"
localhost:3344/actuator/bus-refresh
13.3.2 Spring cloud Bus 动态刷新定点通知
不想全部通知 只想通知 3355 不想通知3366
一句话
看公式
localhost:3344/actuator/bus-refresh/{destination}