热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringCloudBus整合RabbitMQ(17)

转自https:blog.csdn.netu012702547articledetails77823434这个系列我感觉真的太好了,可以一步一步的了解springc

转自 https://blog.csdn.net/u012702547/article/details/77823434

这个系列我感觉真的太好了,可以一步一步的了解spring cloud 的搭建以及更深层次的东西,对想学这门技术的朋友真的入门特别的快,感谢这位大哥的分享,我也会持续的更新过来

上篇文章中小伙伴们已经学会了RabbitMQ的基本安装与使用以及如何在Spring Boot中使用RabbitMQ,整体来说还是比较简单的。本文我们来看看Spring Cloud Bus和RabbitMQ的整合,看看如何更简单的实现配置刷新。



本文是Spring Cloud系列的第二十七篇文章,了解前二十六篇文章内容有助于更好的理解本文:

1.使用Spring Cloud搭建服务注册中心 
2.使用Spring Cloud搭建高可用服务注册中心 
3.Spring Cloud中服务的发现与消费 
4.Eureka中的核心概念 
5.什么是客户端负载均衡 
6.Spring RestTemplate中几种常见的请求方式 
7.RestTemplate的逆袭之路,从发送请求到负载均衡 
8.Spring Cloud中负载均衡器概览 
9.Spring Cloud中的负载均衡策略 
10.Spring Cloud中的断路器Hystrix 
11.Spring Cloud自定义Hystrix请求命令 
12.Spring Cloud中Hystrix的服务降级与异常处理 
13.Spring Cloud中Hystrix的请求缓存 
14.Spring Cloud中Hystrix的请求合并 
15.Spring Cloud中Hystrix仪表盘与Turbine集群监控 
16.Spring Cloud中声明式服务调用Feign 
17.Spring Cloud中Feign的继承特性 
18.Spring Cloud中Feign配置详解 
19.Spring Cloud中的API网关服务Zuul 
20.Spring Cloud Zuul中路由配置细节 
21.Spring Cloud Zuul中异常处理细节 
22.分布式配置中心Spring Cloud Config初窥 
23.Spring Cloud Config服务端配置细节(一) 
24.Spring Cloud Config服务端配置细节(二)之加密解密 
25.Spring Cloud Config客户端配置细节 
26.Spring Cloud Bus之RabbitMQ初窥



在Spring Cloud Config客户端配置细节一文中,我们提到过配置文件动态刷新的问题,结合RabbitMQ,这一需求可以更加轻松的实现。我们先来看下面一张架构图:

这里写图片描述

整张图的工作流程我们之前也详细的说过,当我的微服务A/微服务B启动的时候,会从Config-Server中加载配置文件,而Config-Server则会通过git clone命令将配置中心的配置文件先clone下来在本地保存一份,然后再返回给微服务A/微服务B。 
这是我们之前的工作流程,现在我们结合Spring Cloud Bus来实现配置文件的动态更新。使用Spring Cloud Bus来实现配置文件的动态更新原理很简单,如上图,当我的配置文件更新后,我向Config-Server中发送一个/bus/refresh请求,Config-Server收到这个请求之后,会将这个请求广播出去,这样所有的微服务就都收到这个请求了,微服务收到这个请求之后就会自动去更新自己的配置文件。在这个系统中,从RabbitMQ的角度来看,所有的微服务都是一样的,所以这个/bus/refresh请求我们也可以在微服务节点上发出,一样能够实现配置文件动态更新的效果,但是这样做就破坏了我们微服务的结构,使得微服务节点之间有了区别,所以刷新配置的请求我们还是放在Config-Server上来做比较合适,好了,下面我们就来看看如何实现这一需求。

当我的微服务需要注册到eureka注册中心时,我需要给它添加spring-cloud-starter-eureka依赖,而当我的微服务需要使用Spring Cloud Bus时,我就给它添加spring-cloud-starter-bus-amqp依赖,我们在之前的Config-Server和Config-Client上都添加如下依赖:

org.springframework.cloudspring-cloud-starter-bus-amqp

OK,添加好依赖之后,由于我们的Config-Server一会要连接到RabbitMQ服务器上,所以在Config-Server的application.properties中做如下配置:

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=sang
spring.rabbitmq.password=123456

配置好之后,分别启动我们的Eureka注册中心、Config-Server和Config-Client(Config-Client启动两个实例,方便我们测试),我们在Config-Server和Config-Client的启动日志中都可以看到如下内容:


Mapped “{[/bus/refresh],methods=[POST]}” onto public void org.springframework.cloud.bus.endpoint.RefreshBusEndpo 
int.refresh(java.lang.String)


这个接口就是在我们添加了spring-cloud-starter-bus-amqp依赖之后具备的,Config-Server和Config-Client都具备这个接口。

此时我们访问http://localhost:2008/sang,我们看到的内容如下:

这里写图片描述

然后我们通过git工具,修改配置仓库中文件的内容,修改之后提交,提交之后如果我们直接访问http://localhost:2008/sang,内容还是不变,此时我们可以利用POSTMAN或者RestClient发送一个POST请求到http://localhost:2007/bus/refresh地址,这个时候Config-Server收到通知之后,就会广播配置文件改变的消息,此时再访问http://localhost:2008/sang和http://localhost:2009/sang,就能看到改变后的配置文件了:

这里写图片描述

此时我们发现两个实例http://localhost:2008/sang和http://localhost:2009/sang都改变了,如果我们我们只想通知其中一个微服务更新配置,那么在刷新请求的时候携带上一个参数就行了,比如当我的配置文件更新后,我只想端口号为2008的实例更新配置,端口号为2009的实例不更新配置,那么在配置文件修改之后,我只需发送如下请求即可:http://localhost:2007/bus/refresh?destination=configClient:2008,destination后面指定要更新的实例的instance-id,小伙伴们注意我这里的config-client的如下两条配置:

spring.application.name=configClient
eureka.instance.instance-id=${spring.application.name}:${server.port}

每一个实例的instance-id是spring.application.name和spring.application.name和{server.port}共同组成。

好了我们的Spring Cloud Bus整合RabbitMQ就说到这里,有问题欢迎小伙伴们留言讨论。


推荐阅读
  • 前言: 网上搭建k8s的文章很多,但很多都无法按其说明在阿里云ecs服务器成功搭建,所以我就花了些时间基于自己成功搭建k8s的步骤写了个操作手册,希望对想搭建k8s环境的盆友有所帮 ... [详细]
  • RancherOS 是由 Rancher Labs 开发的一款专为 Docker 设计的轻量级 Linux 发行版,提供了一个全面的 Docker 运行环境。其引导镜像仅 20MB,非常适合在资源受限的环境中部署。本文将详细介绍如何在 ESXi 虚拟化平台上安装和配置 RancherOS,帮助用户快速搭建高效、稳定的容器化应用环境。 ... [详细]
  • 本文推荐了六款高效的Java Web应用开发工具,并详细介绍了它们的实用功能。其中,分布式敏捷开发系统架构“zheng”项目,基于Spring、Spring MVC和MyBatis技术栈,提供了完整的分布式敏捷开发解决方案,支持快速构建高性能的企业级应用。此外,该工具还集成了多种中间件和服务,进一步提升了开发效率和系统的可维护性。 ... [详细]
  • 掌握DSP必备的56个核心问题,我已经将其收藏以备不时之需! ... [详细]
  • ZeroMQ在云计算环境下的高效消息传递库第四章学习心得
    本章节深入探讨了ZeroMQ在云计算环境中的高效消息传递机制,涵盖客户端请求-响应模式、最近最少使用(LRU)队列、心跳检测、面向服务的队列、基于磁盘的离线队列以及主从备份服务等关键技术。此外,还介绍了无中间件的请求-响应架构,强调了这些技术在提升系统性能和可靠性方面的应用价值。个人理解方面,ZeroMQ通过这些机制有效解决了分布式系统中常见的通信延迟和数据一致性问题。 ... [详细]
  • 在Spring Boot项目中,通过YAML配置文件为静态变量设置值的方法与实践涉及以下几个步骤:首先,创建一个新的配置类。需要注意的是,自动生成的setter方法默认是非静态的,因此需要手动将其修改为静态方法,以确保静态变量能够正确初始化。此外,建议使用`@Value`注解或`@ConfigurationProperties`注解来注入配置属性,以提高代码的可读性和维护性。 ... [详细]
  • 【前端开发】深入探讨 RequireJS 与性能优化策略
    随着前端技术的迅速发展,RequireJS虽然不再像以往那样吸引关注,但其在模块化加载方面的优势仍然值得深入探讨。本文将详细介绍RequireJS的基本概念及其作为模块加载工具的核心功能,并重点分析其性能优化策略,帮助开发者更好地理解和应用这一工具,提升前端项目的加载速度和整体性能。 ... [详细]
  • 深入解析Gradle中的Project核心组件
    在Gradle构建系统中,`Project` 是一个核心组件,扮演着至关重要的角色。通过使用 `./gradlew projects` 命令,可以清晰地列出当前项目结构中包含的所有子项目,这有助于开发者更好地理解和管理复杂的多模块项目。此外,`Project` 对象还提供了丰富的配置选项和生命周期管理功能,使得构建过程更加灵活高效。 ... [详细]
  • 深入解析Tomcat:开发者的实用指南
    深入解析Tomcat:开发者的实用指南 ... [详细]
  • 如何在Java中高效构建WebService
    本文介绍了如何利用XFire框架在Java中高效构建WebService。XFire是一个轻量级、高性能的Java SOAP框架,能够简化WebService的开发流程。通过结合MyEclipse集成开发环境,开发者可以更便捷地进行项目配置和代码编写,从而提高开发效率。此外,文章还详细探讨了XFire的关键特性和最佳实践,为读者提供了实用的参考。 ... [详细]
  • IIS 7及7.5版本中应用程序池的最佳配置策略与实践
    在IIS 7及7.5版本中,优化应用程序池的配置是提升Web站点性能的关键步骤。具体操作包括:首先定位到目标Web站点的应用程序池,然后通过“应用程序池”菜单找到对应的池,右键选择“高级设置”。在一般优化方案中,建议调整以下几个关键参数:1. **基本设置**: - **队列长度**:默认值为1000,可根据实际需求调整队列长度,以提高处理请求的能力。此外,还可以进一步优化其他参数,如处理器使用限制、回收策略等,以确保应用程序池的高效运行。这些优化措施有助于提升系统的稳定性和响应速度。 ... [详细]
  • 内网渗透技术详解:PTH、PTT与PTK在域控环境中的应用及猫盘内网穿透配置
    本文深入探讨了内网渗透技术,特别是PTH、PTT与PTK在域控环境中的应用,并详细介绍了猫盘内网穿透的配置方法。通过这些技术,安全研究人员可以更有效地进行内网渗透测试,解决常见的渗透测试难题。此外,文章还提供了实用的配置示例和操作步骤,帮助读者更好地理解和应用这些技术。 ... [详细]
  • NanoPi2 使用体验深入解析(续篇)
    随着Raspberry Pi的问世,开源硬件领域迎来了前所未有的发展,激发了全球范围内的创新热潮。在中国,这一趋势同样催生了一系列类似的开发板,例如NanoPi 2。本文作为前篇的延续,将深入探讨NanoPi 2的实际使用体验,从性能、兼容性到应用场景,进行全面分析。 ... [详细]
  • Nginx入门指南:从零开始掌握基础配置与优化技巧
    Nginx入门指南:从零开始掌握基础配置与优化技巧 ... [详细]
  • 01基本环境win10vs2015Gitpython3.5.3cmake-gui(3.7.2)caffe2github地址:https:github.com ... [详细]
author-avatar
不理坏女孩
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有