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

SpringBoot+SpringCloud基础入门(八)消息总线——SpringCloudBus

消息总线总线是计算机各种功能部件之间传送信息的公共通信干线。消息总线(MessageQueue,MQ),便是消息子各服务之间

消息总线



总线是计算机各种功能部件之间传送信息的公共通信干线。消息总线(Message Queue,MQ),便是消息子各服务之间传输消息的通信干线,是一种跨进程的通信机制,用于在上下游之间传递消息。MQ是一种常见的上下游“逻辑解耦+物理解耦”的消息通信服务,消息发送上游只需要依赖MQ,逻辑上和物理上都不用依赖其他服务。



由于我的系统上,暂时只安装了RabbitMQ,所以本项目以RabbitMQ作为演示。实际应用中,ActiveMQ,Kafka等消息队列,都是可以使用的。




修改Config-Client项目

在之前的Config-Client原有的项目基础上,增加如下依赖:

<dependency><groupId>org.springframework.cloudgroupId><artifactId>spring-cloud-starter-netflix-bus-amqpartifactId>
dependency>
<dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-aopartifactId>
dependency>
<dependency><groupId>org.springframework.cloudgroupId><artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>
<dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-actuatorartifactId>
dependency>

再修改bootstrap.properties文件&#xff0c;Spring Boot的目的就是为了简化一切配置&#xff0c;所以&#xff0c;将原来的application.properties中的内容&#xff0c;拷贝到bootstrap.properties中&#xff0c;再将application.properties文件删除&#xff0c;在bootstrap.properties中添加rabbitMQ相关配置。下面的配置是针对SpringBoot2.0以上版本的&#xff0c;如果是低版本的&#xff0c;可以不写management.endpoints.web.exposure.include&#61;*&#xff1a;

server.port&#61;9007
spring.application.name&#61;config-clientspring.cloud.config.label&#61;master
spring.cloud.config.profile&#61;user
spring.cloud.config.discovery.enabled&#61;true
spring.cloud.config.discovery.serviceId&#61;config-server
eureka.client.service-url.defaultZone&#61;http://localhost:9000/eureka/spring.rabbitmq.host&#61;127.0.0.1
spring.rabbitmq.port&#61;5672
spring.rabbitmq.virtual-host&#61;/CMW
spring.rabbitmq.username&#61;cmw
spring.rabbitmq.password&#61;cmw96920123
management.endpoints.web.exposure.include&#61;*

再在带有&#64;Value远程读取的类上面&#xff0c;添加&#64;RefreshScope注释。

&#64;SpringBootApplication
&#64;RestController
&#64;RefreshScope
public class ConfigClientApplication {public static void main(String[] args) {SpringApplication.run(ConfigClientApplication.class, args);}&#64;Value("${username}")String username;&#64;Value("${password}")String password;&#64;RequestMapping(value &#61; "/user")public String user(){return "您好&#xff0c;您用户名为&#xff1a;"&#43;username&#43;",密码为&#xff1a;"&#43;password;}
}

致此&#xff0c;Config_Client项目就修改完成了。




修改Config-Server项目

在Config-Server项目的pom.xml文件中&#xff0c;添加eureka-client依赖。

<dependency><groupId>org.springframework.cloudgroupId><artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>

在application.properties文件中&#xff0c;添加eureka的client地址。

eureka.client.service-url.defaultZone&#61;http://localhost:9000/eureka/

再在项目启动类上&#xff0c;增加&#64;EnableEurekaClient注解。

&#64;SpringBootApplication
&#64;EnableConfigServer
&#64;EnableEurekaClient
public class ConfigServerApplication {public static void main(String[] args) {SpringApplication.run(ConfigServerApplication.class, args);}
}

致此&#xff0c;对项目的修改基本完成。




运行项目

访问Config-Client中配置的页面&#xff1a;http://localhost:9007/user 出现&#xff1a;


您好&#xff0c;您用户名为&#xff1a;ChengMingWei,密码为&#xff1a;SpringCloud


再进入GitHub修改application-user.properties文件&#xff0c;修改完成后。当我们未执行消息刷新命令时&#xff0c;重新加载http://localhost:9007/user时&#xff0c;显示的仍然是尚未更新的配置。


您好&#xff0c;您用户名为&#xff1a;ChengMingWei,密码为&#xff1a;SpringCloud


在浏览器输入刷新配置文件命令http://localhost:9007/actuator/refresh&#xff08;在低版本中&#xff0c;使用http://localhost:9007/bus/refresh&#xff09; &#xff0c;当在浏览器中&#xff0c;访问此链接时&#xff0c;默认的请求方式为GET&#xff0c;请求会出现405的错误&#xff0c;但是此处是需要以POST方式进行请求的&#xff0c;我们可以使用第三方软件&#xff0c;如Postman&#xff08;链接: 百度网盘下载 密码: yy4s&#xff09;之类的做模拟请求&#xff0c;也可以在如火狐浏览器之类的浏览器中&#xff0c;下载poster插件&#xff0c;进行POST请求。
以POST方式请求后&#xff0c;浏览器中会出现如下信息&#xff0c;标识修改更新了哪些字段&#xff1a;


[
“config.client.version”,
“password”,
“username”
]


接下来&#xff0c;我们再去刷新http://localhost:9007/user&#xff0c;出现&#xff1a;


您好&#xff0c;您用户名为&#xff1a;CMW,密码为&#xff1a;Hello!SpringCloud


已经是修改后的内容了。原本不用消息总线的方式&#xff0c;是在项目启动时&#xff0c;将所有配置文件读取下来&#xff0c;但当配置文件更新时&#xff0c;项目不会同步更新&#xff0c;只有重新运行项目&#xff0c;才会启动。而使用了消息总线的项目&#xff0c;在执行刷新命令后&#xff0c;会重新读取配置&#xff0c;将同步显示新的配置。




相关工具下载

使用RabbitMQ&#xff0c;还需要下载Erlang。
RabbitMQ : http://www.rabbitmq.com/ (官网)
Erlang&#xff1a;http://www.erlang.org/ &#xff08;官网&#xff09;
Postman&#xff1a;https://www.getpostman.com/&#xff08;官网&#xff09;
以上文件我都传到百度云了&#xff1a; https://pan.baidu.com/s/1bjcS9bOEzOv2o8GwIAOLbQ 密码: mq9g &#xff08;百度云&#xff09;


推荐阅读
  • 本文提供了 RabbitMQ 3.7 的快速上手指南,详细介绍了环境搭建、生产者和消费者的配置与使用。通过官方教程的指引,读者可以轻松完成初步测试和实践,快速掌握 RabbitMQ 的核心功能和基本操作。 ... [详细]
  • 本文深入探讨了Spring Cloud Eureka在企业级应用中的高级使用场景及优化策略。首先,介绍了Eureka的安全配置,确保服务注册与发现过程的安全性。接着,分析了Eureka的健康检查机制,提高系统的稳定性和可靠性。随后,详细讨论了Eureka的各项参数调优技巧,以提升性能和响应速度。最后,阐述了如何实现Eureka的高可用性部署,保障服务的连续性和可用性。通过这些内容,开发者可以更好地理解和运用Eureka,提升微服务架构的整体效能。 ... [详细]
  • 基于STM32的智能太阳能路灯设计与华为云IOT集成方案
    基于STM32的智能太阳能路灯设计与华为云IOT集成方案 ... [详细]
  • 本文深入探讨了在使用 Spring Cloud Feign 时遇到的 `java.lang.IllegalStateException` 异常,具体表现为方法体参数过多的问题。通过详细分析异常原因和代码结构,提出了有效的解决方案,帮助开发者更好地理解和处理这一常见问题。 ... [详细]
  • 本文深入探讨了 Spring Cloud 微服务架构中 Gateway 组件的应用,详细介绍了其在实现高效请求路由与过滤方面的关键作用。文章首先从基本配置入手,逐步讲解了如何通过静态路由和动态路由实现灵活的服务访问控制。此外,还特别介绍了如何配置 Gateway 以自动从 Nacos 服务注册中心拉取服务列表,进一步提升系统的可维护性和扩展性。 ... [详细]
  • C#中实现高效UDP数据传输技术
    C#中实现高效UDP数据传输技术 ... [详细]
  • 在Linux系统中,`inet_pton` 和 `inet_ntop` 是两个重要的IP地址转换函数,它们能够实现IP地址在“点分十进制”和“整数”格式之间的相互转换。特别是 `inet_pton`,它不仅支持IPv4,还支持IPv6地址的转换,广泛应用于网络编程中,确保了不同格式IP地址的高效处理和兼容性。本文将详细探讨这两个函数的内部实现机制及其在网络编程中的具体应用。 ... [详细]
  • Prim算法在处理稠密图时表现出色,尤其适用于边数远多于顶点数的情形。传统实现的时间复杂度为 \(O(n^2)\),但通过引入优先队列进行优化,可以在点数为 \(m\)、边数为 \(n\) 的情况下显著降低时间复杂度,提高算法效率。这种优化方法不仅能够加速最小生成树的构建过程,还能在大规模数据集上保持良好的性能表现。 ... [详细]
  • 在处理大规模并发请求时,传统的多线程或多进程模型往往无法有效解决性能瓶颈问题。尽管它们在处理小规模任务时能提升效率,但在高并发场景下,系统资源的过度消耗和上下文切换的开销会显著降低整体性能。相比之下,Python 的 `asyncio` 模块通过协程提供了一种轻量级且高效的并发解决方案。本文将深入解析 `asyncio` 模块的原理及其在实际应用中的优化技巧,帮助开发者更好地利用协程技术提升程序性能。 ... [详细]
  • MongoDB Aggregates.group() 方法详解与编程实例 ... [详细]
  • 在 Linux 系统中,`/proc` 目录实现了一种特殊的文件系统,称为 proc 文件系统。与传统的文件系统不同,proc 文件系统主要用于提供内核和进程信息的动态视图,通过文件和目录的形式呈现。这些信息包括系统状态、进程细节以及各种内核参数,为系统管理员和开发者提供了强大的诊断和调试工具。此外,proc 文件系统还支持实时读取和修改某些内核参数,增强了系统的灵活性和可配置性。 ... [详细]
  • Windows环境下详细教程:如何搭建Git服务
    Windows环境下详细教程:如何搭建Git服务 ... [详细]
  • ZeroMQ在云计算环境下的高效消息传递库第四章学习心得
    本章节深入探讨了ZeroMQ在云计算环境中的高效消息传递机制,涵盖客户端请求-响应模式、最近最少使用(LRU)队列、心跳检测、面向服务的队列、基于磁盘的离线队列以及主从备份服务等关键技术。此外,还介绍了无中间件的请求-响应架构,强调了这些技术在提升系统性能和可靠性方面的应用价值。个人理解方面,ZeroMQ通过这些机制有效解决了分布式系统中常见的通信延迟和数据一致性问题。 ... [详细]
  • 本文深入探讨了Java枚举类型的使用与实践,详细解析了枚举的基本用法及其在实际开发中的应用。首先介绍了枚举作为常量的替代方案,自JDK 1.5起,通过枚举可以更加简洁、安全地定义常量,避免了传统方式中可能出现的错误。此外,文章还探讨了枚举在实现单例模式、状态机等场景中的优势,并提供了多个实际案例,帮助开发者更好地理解和运用这一强大的语言特性。 ... [详细]
  • 深入解析Spring Boot源码的序章
    本系列文章旨在深入解析Spring Boot的源代码,分享笔者在学习过程中的心得与体会。内容涵盖核心源码分析,可能会对初学者造成一定理解难度,建议读者结合笔者提供的详细注释进行阅读,以获得更好的学习体验。 ... [详细]
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社区 版权所有