【Spring Cloud】Spring Cloud之整合Spring Cloud Bus以及最佳实践
一、整合步骤
1)加入Maven坐标
<!-- actuator监控模块 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>2.0..RELEASE</version>
</dependency>
<!--amqp-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
<version>2.0..RELEASE</version>
</dependency>
<!--spring cloud bus-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
<version>2.0..RELEASE</version>
</dependency>
2) 添加配置
spring.rabbitmq.host=localhost
spring.rabbitmq.port=
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
# 开放actuator/bus-refresh断点
management:
endpoints:
web:
exposure:
include: bus-refresh
3)程序代码引入配置参数的地方,添加@RefreshScope 注解,如下:
/**
* @author zhangboqing
* @date 2019-09-03
*/
@RestController
@RefreshScope
public class UserController { @Value("${pro1}")
private String pro1; @ApiOperation(value = "用户模块-GET操作")
@GetMapping(value = "get")
public ApiResponseT get() { return ApiResponseT.builder().setData(pro1);
} }
4)启动程序,访问打印参数。然后修改参数,post方式请求http://localhost:10802/actuator/bus-refresh来刷新程序参数值,再访问参数发现值自动就更新来。
在同一个程序多实例的情况下,刷新其中一个实例,其他实例也会自动被刷新。
二、Spring Cloud Bus整合最佳实践
1)上面的整合步骤,在整个架构上如下图所示,这些微服务应用的实例中都引入了Spring Cloud Bus,所以它们都连接到了RabbitMQ的消息总线上。
我们可以从Git仓库中配置的修改到发起actuator/bus-refresh的POST请求这一步可以通过Git仓库的Web Hook来自动触发。由于所有连接到消息总线上的应用都会接收到更新请求,所以在WebHook中就不需要维护所有节点内容来进行更新,这样就不用通过Web Hook来逐个进行刷新每个程序配置的问题。
注意:actuator/bus-refresh断点有提供destination参数,用来定位具体要刷新的应用程序。此时总线上的各应用实例会根据destination属性的值来判断是否为自己的实例名,
,实例的默认命名按此规则生成:${spring.cloud.client.hostname}:${spring.applica-tion.name}:${spring.application.instance_id:${server.port}}};
若符合才进行配置刷新,若不符合就忽略该消息。比如,我们可以请求actuator/bus/refresh?destination=user:9000或者actuator/bus/refresh?destination=user:**
2)基于上面的架构优化及最佳实践,如下图:

相关改动如下:
1. 在Config Server中也引入Spring Cloud Bus,将配置服务端也加入到消息总线中来。
2. actuator/bus/refresh请求不再发送到具体服务实例上,而是发送给Config Server,并通过destination参数来指定需要更新配置的服务或实例。
通过上面的改动,我们的服务实例不需要再承担触发配置更新的职责。同时,对于Git的触发等配置都只需要针对ConfigServer即可,从而简化了集群上的一些维护工作。
【Spring Cloud】Spring Cloud之整合Spring Cloud Bus以及最佳实践的更多相关文章
- Spring与web MVC的整合——Spring的应用上下文管理
问题1 如何让web容器加载你的web MVC框架 对于基于servlet的web容器来说,遵循的是servlet规范,入口配置文件是web.xml.这类web容器会在启动的时候会而且仅会加载如下三种 ...
- spring boot使用freemarker模版整合spring Data JPA
目录结构 第一步:在pom.xml文件中添加依赖 <!--模板依赖--> <dependency> <groupId>org.springframework.boo ...
- Spring Data JPA 整合Spring
1.1 Spring Data JPA 与 JPA和hibernate之间的关系 JPA是一套规范,内部是有接口和抽象类组成的.hibernate是一套成熟的ORM框架,而且Hibernate实现 ...
- Spring Boot工程结构推荐程结构(最佳实践)
工程结构(最佳实践) Spring Boot框架本身并没有对工程结构有特别的要求,但是按照最佳实践的工程结构可以帮助我们减少可能会遇见的坑,尤其是Spring包扫描机制的存在,如果您使用最佳实践的工程 ...
- 整合SPRING CLOUD云服务架构 - 企业分布式微服务云架构构建
整合SPRING CLOUD云服务架构 - 企业分布式微服务云架构构建 1. 介绍 Commonservice-system是一个大型分布式.微服务.面向企业的JavaEE体系快速研发平台,基于模 ...
- Spring Cloud gateway 五 Sentinel整合
微服务当前这么火爆的程度,如果不能学会一种微服务框架技术.怎么能升职加薪,增加简历的筹码?spring cloud 和 Dubbo 需要单独学习.说没有时间?没有精力?要学俩个框架?而Spring C ...
- Spring Cloud 微服务技术整合
微服务架构风格是一种使用一套小服务来开发单个应用的方式途径,每个服务运行在自己的进程中,并使用轻量级机制通信,通常是HTTP API,这些服务基于业务能力构建,并能够通过自动化部署机制来独立部署,这些 ...
- Spring Cloud Alibaba学习笔记(15) - 整合Spring Cloud Gateway
Spring Cloud Gateway 概述 Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于Netty.Reactor以及WEbFlux构建,它 ...
- Spring Cloud Alibaba学习笔记(1) - 整合Spring Cloud Alibaba
Spring Cloud Alibaba从孵化器版本毕业:https://github.com/alibaba/spring-cloud-alibaba,记录一下自己学习Spring Cloud Al ...
随机推荐
- 深入js系列-类型(开篇)
思考 作为一个编程人员,你可能从来没仔细思考过,为什么这么多高级语言会有类型这东西. 实际上,类型有点类似生活中的类别,我们日常生活,早已经把这个概念理解到了,切肉和切水果会用不同的刀. 语言级别的类 ...
- Affy包 estrogen包
下载安装 if (!requireNamespace("BiocManager", quietly = TRUE)) install.packages("BiocMana ...
- ACT开发初步(二)——XML
由于pc无法发文,先挖坑,慢慢填
- .NET 微服务 1. Docker 容器简介和选择
容器特点 1. 容器可以将应用程序的依赖性和配置(抽象为 Mainfest 文件并部署)打包成一个容器镜像,可以让多次部署操作中的环境保持一致 2. 可以让IT人员很少或者不做修改就可以跨环境部署软件 ...
- solr配置同义词,停止词,和扩展词库(IK分词器为例)
定义 同义词:搜索结果里出现的同义词.如我们输入”还行”,得到的结果包括同义词”还可以”. 停止词:在搜索时不用出现在结果里的词.比如is .a .are .”的”,“得”,“我” 等,这些词会在句子 ...
- cad.net 图层隐藏 IsHidden 用法 eDuplicateRecordName 报错
提要:影响图层显示的主要有:关闭 isOff冻结 IsFrozen 图层隐藏 isHidden视口冻结 FreezeLayersInViewport 今天小博发现了一件事情 ...
- python入门之数据类型及内置方法
目录 一.题记 二.整形int 2.1 用途 2.2 定义方式 2.3 常用方法 2.3.1 进制之间的转换 2.3.2 数据类型转换 3 类型总结 三.浮点型float 3.1 用途 3.2 定义方 ...
- 自定义标签&JSON数据处理
最近几日去参加一些面试,多多少少有一些收获. 现将遇到的一些面试题,做一下分析和总结. 1.使用原生JS,不能使用递归,查找dom中所有以“<com-”开头的自定义标签tagName. < ...
- Java注解及其原理以及分析spring注解解析源码
注解的定义 注解是那些插入到源代码中,使用其他工具可以对其进行处理的标签. 注解不会改变程序的编译方式:Java编译器对于包含注解和不包含注解的代码会生成相同的虚拟机指令. 在Java中,注解是被当做 ...
- k8s创建pod和service的过程
一.概念介绍 更详细的参见:https://www.kubernetes.org.cn/5335.html 1.K8s K8s 是一种用于在一组主机上运行和协同容器化应用程序的系统,提供应用部署.规划 ...