96-java-springcloud(09)-配置中心和消息总线-config/bus

springcloud config

在这里插入图片描述

一.概述

1.是什么?

参考官网: https://cloud.spring.io/spring-cloud-static/spring-cloud-config/2.2.3.RELEASE/reference/html/
产生原因
由于分布式微服务将大的服务拆分成了一个个小的服务,而且由于微服务的规模小,通常一个项目可能产生及时上百个微服务,而就会有上百个配置文件,怎么样统一管理这些配置文件?

springcloud-config是什么?
springcloud-config为微服务架构中的微服务提供集中式的外部支持,配置服务器为各个不同的微服务应用提供一个中心话的服务配置管理.

2.能干嘛?

springcloud-config的作用是什么?

  • 集中管理配置文件
  • 不同环境不同配置,动态化的配置更新,分环境部署比如dev/test/prod/beta/release
  • 运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉取配置自己的信息
  • 当配置发生变动时,服务不需要重启即可感知到配置的变化并应用新的配置
  • 将配置信息以REST接口的形式暴露,#post、curl访问刷新均可…
3.怎么干?

springcloud的架构如图
在这里插入图片描述

角色
  • git仓库
    统一存放配置文件的地方,我们把配置文件通常统一存放在git仓库中.
  • config server
    配置中心,负责按照约定去克隆远程仓库(通常是git)到server中,然后等待client来读取配置文件;或者主动去分发配置文件给连接他的客户端.
  • config client
    这就是一个个的微服务,他们会访问server端去获取对应的配置文件.

二.服务端配置

1.git准备

可参考文章:
https://blog.csdn.net/weixin_45449911/article/details/106193212

  • (1) 申请gitHub账号
  • (2) 在远程的git仓库创建一个本项目的仓库
  • (3) 本地安装git
  • (4) idea中集成git/github
2.server module创建
  1. 建module
  2. 改pom
    引入springcloud-config的依赖
		<!--config-server端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>
  1. 写yml

配置远程git库的地址

spring:
  application:
    name: cloud-config-center
  cloud:
    config: #config配置中心
      server:
        git:
          uri:  https://github.com/gulong-qk/cloud2020.git
          skipSslValidation: true  #表示关闭ssl证书验证.如果报错无法连接上git,则可加此配置
          search-paths:
            - cloud2020
      label: master
  1. 主启动
    @EnableConfigServer //启动config-server端
@SpringBootApplication
@EnableConfigServer //启动config-server端
public class ConfigCenterMain3344 {
    
     public static void main(String[] args) {
            SpringApplication.run(ConfigCenterMain3344.class,args);
        }
}

5.测试
访问:
http://localhost:3344/master/application-dev.yml
显示出github仓库中对应的application-dev.yml中的文件,及表示正确.

3.读取github上文件的格式

label:分支名
application:文件名
profile:微服务active profile激活的配置文件(dev/prod/test等等)

  • /{application}/{profile}[/{label}]
  • /{application}-{profile}.yml
  • /{label}/{application}-{profile}.yml #这种方式最好
  • /{application}-{profile}.properties
  • /{label}/{application}-{profile}.properties

例如:
http://config-3344.com:3344/master/config-dev.yml
http://config-3344.com:3344/master/config-test.yml
http://config-3344.com:3344/dev/config-dev.yml
http://config-3344.com:3344/dev/config-test.yml在这里插入图片描述

三.客户端配置

1.建module

2.改pom

		<!--配置config的客户端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>

3.写bootstrap.yml

说明:
1.bootstrap.yml是系统级别的,加载优先级要高于application.yml
2.application.yml是用户及级别的,加载优先级要低于bootstrap.yml
3.我们通常约定bootstrap.yml用于读取外部的配置信息,他并不会被application.yml覆盖

spring:
  application:
    name: config-client
  cloud:
    config: #springcloud config的配置
      label: master  #分支名
      name: config #文件名
      profile: dev #激活得文件
      uri: http://localhost:3344  #读取文件:  http://localhost:3344/master/config-dev.yml或者是http://localhost:3344/master/config-dev.properties

4.主启动
没有特别的注解

@SpringBootApplication
public class ConfigClientMain3355 {
    public static void main(String[] args) {
            SpringApplication.run( ConfigClientMain3355.class,args);
        }
}
 

5.业务类

@RestController
public class ConfigClientController {
	//这个config.info配置在远程的github仓库中,如果读取远程配置成功了,证明我们可以搭建成功
    @Value("${config.info}")
    private String configInfo;
	
	/**
	*测试能都读取到配置文件中的信息
	*/
    @GetMapping("/configInfo")
    public String getConfigInfo(){
        return configInfo;
    }
}
 

6.测试

  • 启动eureka
  • 启动config server
  • 启动config client
  • 访问client端,读取远程github上的配置信息,是否成功

7.出现问题
如果远程库github上的文件修改变动了,检查config server配置信息是否发生变动,检查client是否配置更新.

  • server端配置刷新及时
  • client端无法刷新配置,除非重启

怎样再不重启client端的情况下,让client端刷新配置?

四.config客户端配置动态刷新(单个通知client端)

1.修改client端的pom

增加actuator的监控依赖

<!--增加健康检查-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
 
2.修改bootstrap.yml

暴露监控端点

#暴露监控端点
management:
  endpoints:
    web:
      exposure:
        include: "*"
3.修改controller

controller类上添加注解@RefreshScope
在这里插入图片描述

4.修改配置并刷新文件的步骤

步骤:

  • 1.启动所有的项目eureka,server端和client端
  • 2.修改github远程库文件
  • 3.post请求格式,发送刷新请求
    http://hostname:port/actuator/refresh
  • 4.验证config server端读取到的配置
  • 5.验证config client的配置

重点:
运维人员在修改了github远程库之后,一定要发送一个post格式请求去刷新client端的配置.
请求格式:http://hostname:port/actuator/refresh

springcloud bus(消息总线)

一.简介

1.什么是消息总线?
在微服务架构系统中,通常会使用轻量级的消息代理来构建一个共享的消息平台,并且在这个平台通道上构建一个消息主题,让所有的微服务实例都连接上消息这个总线,一旦本消息主题有消息发布了,则所有的微服务实例都可以收到这个消息.

总之,消息总线其实就是一种消息通知机制,由消息队列实现.

2.能干什么?
在这里插入图片描述

3.实现机制
springcloud Bus支持两种消息代理:RabbitMQ和Kafka.
也就是两种消息队列实现.

二.rabbitMQ环境准备

参考文章:
https://blog.csdn.net/weixin_45449911/article/details/106901842

三.Bus全局广播动态更新所有client的配置
1.全局动态刷新架构设计思想

(1) 通知config client,让客户端再去通知其他客户端
#利用消息总线触发一个客户端/bus/refresh,而刷新所有客户端的配置
在这里插入图片描述
在这里插入图片描述
(2) 通知config server端,让server再去通知其他客户端(推荐)
#利用消息总线触发服务端/bus/refresh,而刷新所有客户端的配置
在这里插入图片描述
在这里插入图片描述

2.修改前面的config server端和config client端

(1) pom文件增加bus的依赖
amqp这里的amqp协议springboot的默认实现是rabbitmq

	<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
	</dependency>

(2) yml 增加
config server是修改application.yml
config client 是修改bootstrap.yml

rabbitmq: #rabbitMQ的地址
    host: localhost
    port: 5672
    username: guest
    password: guest

(3)修改更新配置文件的流程

  • 修改github远程库文件

  • (2选1)发送post请求到config server端(client全部更新)
    curl -X POST "http://localhost:3344/actuator/bus-refresh"

  • (2选1)发送post请求到你指定修改的config client端(指定更新client)
    curl -X POST "http://localhost:3344/actuator/bus-refresh/config-client:3355"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值