Day40_SpringCloud—服务配置Config+服务总线Bus
文章目录一、服务配置Config的概述二、Config服务端的搭建1.克隆Git上的仓库2.新建3344端口3.测试4.读取配置的方式三、Config客户端1.Config客户端配置2.Config动态刷新四、消息总线Bus概述一、服务配置Config的概述随着微服务数量的增大,你不能一个一个地去改配置,你要一处修改处处生效。SpringCloud Config为微服务架构中的微服务提供集中化的外
文章目录
一、服务配置Config的概述
- 随着微服务数量的增大,你不能一个一个地去改配置,你要一处修改处处生效。
- SpringCloud Config为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置。
二、Config服务端的搭建
1.克隆Git上的仓库
1.在GitHub上新建一个名为springcloud-config的新Repository
2.由上一步获得刚新建的git地址
https://gitee.com/Redhur/springcloud-config.git
3.本地硬盘目录上新建git仓库并clone
2.新建3344端口
1.新建Module
2.改pom
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
3.写yml
4.主启动类
@SpringBootApplication
@EnableConfigServer
public class ConfigCenterMain3344
{
public static void main(String[] args) {
SpringApplication.run(ConfigCenterMain3344.class, args);
}
}
4.windows下修改hosts文件,增加映射
跟eureka一样,作为所有微服务的总代理都需要修改host文件
3.测试
成功实现了用SpringCloud Config通过GitHub获取配置信息
4.读取配置的方式
三、Config客户端
1.Config客户端配置
1.建Module
2.改pom
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
3.写yml
server:
port: 3355
spring:
application:
name: config-client
cloud:
#Config客户端配置
config:
label: master #分支名称
name: config #配置文件名称
profile: dev #读取后缀名称 上述3个综合:master分支上config-dev.yml的配置文件被读取http://config-3344.com:3344/master/config-dev.yml
uri: http://localhost:3344 #配置中心地址,当你访问3355时我会去找localhostt:3344/master/config-dev.yml
#服务注册到eureka地址
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka
4.主启动类
@EnableEurekaClient
@SpringBootApplication
public class ConfigClientMain3355
{
public static void main(String[] args)
{
SpringApplication.run(ConfigClientMain3355.class,args);
}
}
5.业务类
@RestController
public class ConfigClientController
{
@Value("${config.info}")
private String configInfo;
@GetMapping("/configInfo")
public String getConfigInfo()
{
return configInfo;
}
}
6.测试
7.小问题
2.Config动态刷新
1.修改3355的pom
2.修改3355的yml
server:
port: 3355
spring:
application:
name: config-client
cloud:
#Config客户端配置
config:
label: master #分支名称
name: config #配置文件名称
profile: dev #读取后缀名称 上述3个综合:master分支上config-dev.yml的配置文件被读取
uri: http://localhost:3344 #配置中心地址k
#服务注册到eureka地址
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka
# 暴露监控端点(这样才能被监控到)
management:
endpoints:
web:
exposure:
include: "*"
3.改写业务类
5.当运维人员修改git配置后,运维人员必须发送一次post请求来刷新3355
curl -X POST "http://localhost:3355/actuator/refresh"
6.测试
7.问题
请查看“消息总线—Bus”
四、消息总线Bus概述
1.消息总线Bus概述
- Spring Cloud Bus 配合 Spring Cloud Config 使用可以实现配置的动态刷新。
- Spring Cloud Bus整合了Java的事件处理机制和消息中间件的功能。
- Spring Clud Bus目前只支持RabbitMQ和Kafka。
2.两种广播方式
你一定要分清楚,是bus发给服务端config-server然后由服务端config-server通知给全局呢 还是 bus通知一个客户端然后由该客户端传播出去。但是我们使用的是bus发给服务端config-server然后由服务端config-server通知给全局,理由如下:
五、准备工作
1.启动rabbitmq
①到Linux环境下运行"cd /root"
②访问192.168.56.103:15672
,登录名admin,密码111111,
2.新建3366客户端
1.新建Module
2.改pom
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
3.写yml
server:
port: 3366
spring:
application:
name: config-client
cloud:
#Config客户端配置
config:
label: master #分支名称
name: config #配置文件名称
profile: dev #读取后缀名称 上述3个综合:master分支上config-dev.yml的配置文件被读取http://config-3344.com:3344/master/config-dev.yml
uri: http://localhost:3344 #配置中心地址
#服务注册到eureka地址
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka
# 暴露监控端点
management:
endpoints:
web:
exposure:
include: "*"
4.主启动类
@EnableEurekaClient
@SpringBootApplication
public class ConfigClientMain3366
{
public static void main(String[] args)
{
SpringApplication.run(ConfigClientMain3366.class,args);
}
}
5.业务类Controller
@RestController
@RefreshScope
public class ConfigClientController
{
@Value("${server.port}")
private String serverPort;
@Value("${config.info}")
private String configInfo;
@GetMapping("/configInfo")
public String configInfo()
{
return "serverPort: "+serverPort+"\t\n\n configInfo: "+configInfo;
}
}
六、完成SpringCloud Bus动态刷新全局广播
1.技术选型
由3344来通知3355和3366
2.给服务端3344添加消息总线支持
1.修改3344的pom文件
2.修改3344的yml文件
3.给客户端3355添加消息总线支持
1.修改3355的pom
2.修改3355的yml
4.给客户端3366添加消息总线支持
1.修改3366的pom
2.修改3366的yml
5.测试
七、Bus动态刷新的定点通知
有的时候我们没必要让所有客户端都动态刷新,只想要定点通知,只通知3355不通知3366
公式:http://localhost:配置中心的端口号/actuator/bus-refresh/{destination}
这样/bus/refresh请求不再发送到具体的服务实例上,而是发给config server并通过destination参数类指定需要更新配置的服务或实例
更多推荐
所有评论(0)