一、整合步骤

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以及最佳实践的更多相关文章

  1. Spring与web MVC的整合——Spring的应用上下文管理

    问题1 如何让web容器加载你的web MVC框架 对于基于servlet的web容器来说,遵循的是servlet规范,入口配置文件是web.xml.这类web容器会在启动的时候会而且仅会加载如下三种 ...

  2. spring boot使用freemarker模版整合spring Data JPA

    目录结构 第一步:在pom.xml文件中添加依赖 <!--模板依赖--> <dependency> <groupId>org.springframework.boo ...

  3. Spring Data JPA 整合Spring

    1.1   Spring Data JPA 与 JPA和hibernate之间的关系 JPA是一套规范,内部是有接口和抽象类组成的.hibernate是一套成熟的ORM框架,而且Hibernate实现 ...

  4. Spring Boot工程结构推荐程结构(最佳实践)

    工程结构(最佳实践) Spring Boot框架本身并没有对工程结构有特别的要求,但是按照最佳实践的工程结构可以帮助我们减少可能会遇见的坑,尤其是Spring包扫描机制的存在,如果您使用最佳实践的工程 ...

  5. 整合SPRING CLOUD云服务架构 - 企业分布式微服务云架构构建

    整合SPRING CLOUD云服务架构 - 企业分布式微服务云架构构建 1.   介绍 Commonservice-system是一个大型分布式.微服务.面向企业的JavaEE体系快速研发平台,基于模 ...

  6. Spring Cloud gateway 五 Sentinel整合

    微服务当前这么火爆的程度,如果不能学会一种微服务框架技术.怎么能升职加薪,增加简历的筹码?spring cloud 和 Dubbo 需要单独学习.说没有时间?没有精力?要学俩个框架?而Spring C ...

  7. Spring Cloud 微服务技术整合

    微服务架构风格是一种使用一套小服务来开发单个应用的方式途径,每个服务运行在自己的进程中,并使用轻量级机制通信,通常是HTTP API,这些服务基于业务能力构建,并能够通过自动化部署机制来独立部署,这些 ...

  8. Spring Cloud Alibaba学习笔记(15) - 整合Spring Cloud Gateway

    Spring Cloud Gateway 概述 Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于Netty.Reactor以及WEbFlux构建,它 ...

  9. Spring Cloud Alibaba学习笔记(1) - 整合Spring Cloud Alibaba

    Spring Cloud Alibaba从孵化器版本毕业:https://github.com/alibaba/spring-cloud-alibaba,记录一下自己学习Spring Cloud Al ...

随机推荐

  1. 使用mxnet实现卷积神经网络LeNet

    1.LeNet模型 LeNet是一个早期用来识别手写数字的卷积神经网络,这个名字来源于LeNet论文的第一作者Yann LeCun.LeNet展示了通过梯度下降训练卷积神经网络可以达到手写数字识别在当 ...

  2. pcm混音的一种方式

    转载 混音: Mix的意思是混音,无论在自然界,还是在音频处理领域这都是非常普遍的现象.自然界里你能同时听到鸟鸣和水声,这是因为鸟鸣和水声的波形在空气中形成了叠加,耳朵听到后能区分鸟鸣和水声这两种波形 ...

  3. CSRF 跨站

    目录 CSRF 跨站请求伪造 解决跨站伪造问题: csrf 相关的装饰器: csrf.js文件: CSRF 跨站请求伪造 CSRF全称为Cross-site request forgery,也被称为: ...

  4. [BUAA软工]团队贡献分博客

    Gamma阶段贡献分 Beta阶段贡献分 Alpha阶段贡献分 (博客最后部分) 复制过来: Alpha阶段 名字 角色 具体的可衡量的可验证的贡献 zpj PM,后端开发 博客X3 65 commi ...

  5. 《Linux就该这么学》培训笔记_ch19_使用PXE+Kickstart无人值守安装服务

    <Linux就该这么学>培训笔记_ch19_使用PXE+Kickstart无人值守安装服务 文章最后会post上书本的笔记照片. 文章主要内容: 无人值守系统 部署相关服务程序 配置DHC ...

  6. failed to open stream: operation failed

    # composer require oygza/aliyun-php-sdk-afs You are running composer with xdebug enabled. This has a ...

  7. CentOS7-部署测试Apollo

    linux部署apollo环境要求:jdk1.8.mysql5.7 centos7安装jdk1.8跟mysql5.7可以参考我这两篇文章 https://www.cnblogs.com/reasonz ...

  8. Controller如何进行重定向跳转

    因为在Controller的返回都是默认走视图解析器的InternalResourceViewResolver,而视图解析器都是进行请求转发,需要在返回时地址前加入字符redirect: 视图解析器不 ...

  9. AFO啦!

    \(\mathrm{CSP}2019\)结束了,我的信息生活也要结束了,从五年级开始的信息学习,陪伴我度过了很多,今天要放手,全心学习文化课了. 信息学,再见!

  10. [Atcoder AGC032C]Three Circuits

    题目大意:有一张$n$个点$m$条边的无向连通图,判断是否可以从中分出$3$个环,满足三个环覆盖整张图并且没有重复的边.$n,m\leqslant10^5$ 题解:分类讨论.有度数为奇肯定不行,因为连 ...