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

第七篇:消息总线(SpringCloudBus)

SpringCloudBus将分布式的节点用轻量的消息代理连接起来。它可以用于广播配置文件的更改或者服务之间的通讯,也可以用于监控。本文要讲述的是用SpringClo

Spring Cloud Bus 将分布式的节点用轻量的消息代理连接起来。它可以用于广播配置文件的更改或者服务之间的通讯,也可以用于监控。本文要讲述的是用Spring Cloud Bus实现通知微服务架构的配置文件的更改。

一、准备工作

本文还是基于上一篇文章来实现。按照官方文档,我们只需要在配置文件中配置 spring-cloud-starter-bus-amqp ;这就是说我们需要装rabbitMq,点击rabbitmq下载,点击erlang下载。上两个下载都是百度网盘的链接,也可以https://download.csdn.net/download/snowwolf9999/10551353帮我加点CSDN分,嘿嘿。

具体安装erlang环境,参考https://www.cnblogs.com/PPBoy/p/9335943.html。

二、改造eureka-config-client工程。

在pom文件加上起步依赖spring-cloud-starter-bus-amqp和spring-boot-starter-actuator。

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

完整的配置文件如下&#xff1a;

<project xmlns&#61;"http://maven.apache.org/POM/4.0.0" xmlns:xsi&#61;"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation&#61;"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0modelVersion><groupId>com.sungroupId><artifactId>eureka-config-clientartifactId><version>0.0.1-SNAPSHOTversion><packaging>jarpackaging><name>config-clientname><description>Demo project for Spring Bootdescription><parent><groupId>com.sungroupId><artifactId>springcloud-parentartifactId><version>0.0.1-SNAPSHOTversion>parent><dependencies><dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-webartifactId>dependency><dependency><groupId>org.springframework.cloudgroupId><artifactId>spring-cloud-starter-configartifactId>dependency><dependency><groupId>org.springframework.cloudgroupId><artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>dependency><dependency><groupId>org.springframework.cloudgroupId><artifactId>spring-cloud-starter-bus-amqpartifactId>dependency><dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-actuatorartifactId>dependency>dependencies>
project>

View Code

在配置文件application.yml中加上RabbitMq的配置&#xff0c;包括RabbitMq的地址、端口&#xff0c;用户名、密码。并需要加上spring.cloud.bus的三个配置&#xff0c;具体如下&#xff1a;

spring:application:name: config-clientcloud:config:label: masterprofile: dev#uri: http://localhost:8888/bus:enabled: truetrace:enabled:truediscovery:enabled: trueserviceId: config-serverrabbitmq: host: localhostport: 5672username: guestpassword: guesteureka:client:serviceUrl:defaultZone: http://localhost:8888/eureka/
server:port: 8881management: endpoints:web:exposure:include: bus-refresh

 

ConfigClientApplication启动类代码如下&#xff1a;

package com.sun;import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;&#64;SpringBootApplication
&#64;RestController
&#64;EnableEurekaClient
&#64;RefreshScope
//添加注释
public class ConfigClientApplication {public static void main(String[] args) {SpringApplication.run(ConfigClientApplication.class, args);}&#64;Value("${foo}")String foo;&#64;RequestMapping(value &#61; "/hi")public String hi(){return foo;}
}

这时我们去代码仓库将foo的值改为“foo version 4”&#xff0c;即改变配置文件foo的值。如果是传统的做法&#xff0c;需要重启服务&#xff0c;才能达到配置文件的更新。此时&#xff0c;我们只需要发送post请求&#xff1a;http://localhost:8881/actuator/bus-refresh&#xff0c;你会发现config-client会重新读取配置文件&#xff1a;

c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://localhost:8888

tip&#xff1a;这里发送post请求可以用postman&#xff1a;

 

 写地址发送就可以了&#xff0c;这时我们再访问http://localhost:8881/hi 或者http://localhost:8882/hi 浏览器显示&#xff1a;

foo version 4

另外&#xff0c;/actuator/bus-refresh接口可以指定服务&#xff0c;即使用”destination”参数&#xff0c;比如 “/actuator/bus-refresh?destination&#61;customers:**” 即刷新服务名为customers的所有服务。

三、分析

此时的架构图&#xff1a; 

当git文件更改的时候&#xff0c;通过pc端用post 向端口为8881的config-client发送请求/bus/refresh&#xff0f;&#xff1b;此时8881端口会发送一个消息&#xff0c;由消息总线向其他服务传递&#xff0c;从而使整个微服务集群都达到更新配置文件。

当然&#xff0c;向端口8882的服务发送也可以。

最后说一下http://localhost:8881/actuator/bus-refresh不能成功刷新&#xff0c;基本上有2种可能&#xff1a;

1、查看rabbitmq是否安装完毕&#xff0c;是否运行。查看rabbitmq状态&#xff0c;参考&#xff1a;https://blog.csdn.net/lglgsy456/article/details/79045850

2、必须是post请求。可以由postman模拟发送。

本文绝大部分参考博客&#xff1a;https://blog.csdn.net/forezp/article/details/81041062 再次对博主表示感谢。

转:https://www.cnblogs.com/PPBoy/p/9405460.html



推荐阅读
  • .Net下RabbitMQ发布订阅模式实践
    一、概念AMQP,即AdvancedMessageQueuingProtocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的 ... [详细]
  • SpringCloud之Bus(消息总线)
    说明:关于SpringCloud系列的文章中的代码都在码云上面地址:https:gitee.comzh_0209_javaspringcloud-ali ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
  • 2021年Java开发实战:当前时间戳转换方法详解与实用网址推荐
    在当前的就业市场中,金九银十过后,金三银四也即将到来。本文将分享一些实用的面试技巧和题目,特别是针对正在寻找新工作机会的Java开发者。作者在准备字节跳动的面试过程中积累了丰富的经验,并成功获得了Offer。文中详细介绍了如何将当前时间戳进行转换的方法,并推荐了一些实用的在线资源,帮助读者更好地应对技术面试。 ... [详细]
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
  • 在 CentOS 7 上部署和配置 RabbitMQ 消息队列系统时,首先需要安装 Erlang,因为 RabbitMQ 是基于 Erlang 语言开发的。具体步骤包括:安装必要的依赖项,下载 Erlang 源码包(可能需要一些时间,请耐心等待),解压源码包,解决可能出现的错误,验证安装是否成功,并将 Erlang 添加到环境变量中。接下来,下载 RabbitMQ 的 tar.xz 压缩包,并进行解压和安装。确保每一步都按顺序执行,以保证系统的稳定性和可靠性。 ... [详细]
  • 工程项目管理系统源码简洁+好用+全面工程项目管理系统
    ​​工程项目管理系统是指从事工程项目管理的企业(以下简称工程项目管理企业)受业主委托,按照合同约定,代表业主对工程项目的组织 ... [详细]
  • Spring cloud微服务架构前后端分离博客系统,Vue+boot源码分享 ... [详细]
  • CentOS7 安装RabbitMQ
    1安装编译工具yuminstall-ymakegccgcc-c++m4opensslopenssl-develncurses-develunixODBCunixODBC-devel ... [详细]
  • 阿里巴巴终面技术挑战:如何利用 UDP 实现 TCP 功能?
    在阿里巴巴的技术面试中,技术总监曾提出一道关于如何利用 UDP 实现 TCP 功能的问题。当时回答得不够理想,因此事后进行了详细总结。通过与总监的进一步交流,了解到这是一道常见的阿里面试题。面试官的主要目的是考察应聘者对 UDP 和 TCP 在原理上的差异的理解,以及如何通过 UDP 实现类似 TCP 的可靠传输机制。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 为了在Hadoop 2.7.2中实现对Snappy压缩和解压功能的原生支持,本文详细介绍了如何重新编译Hadoop源代码,并优化其Native编译过程。通过这一优化,可以显著提升数据处理的效率和性能。此外,还探讨了编译过程中可能遇到的问题及其解决方案,为用户提供了一套完整的操作指南。 ... [详细]
  • 本文详细介绍了批处理技术的基本概念及其在实际应用中的重要性。首先,对简单的批处理内部命令进行了概述,重点讲解了Echo命令的功能,包括如何打开或关闭回显功能以及显示消息。如果没有指定任何参数,Echo命令会显示当前的回显设置。此外,文章还探讨了批处理技术在自动化任务执行、系统管理等领域的广泛应用,为读者提供了丰富的实践案例和技术指导。 ... [详细]
  • 分布式一致性算法:Paxos 的企业级实战
    一、简介首先我们这个平台是ES专题技术的分享平台,众所周知,ES是一个典型的分布式系统。在工作和学习中,我们可能都已经接触和学习过多种不同的分布式系统了,各 ... [详细]
  • 启动activemq_「Java」SpringBoot amp; ActiveMQ
    一、消息队列消息队列中间件是分布式系统中重要的组件,主要解决应用耦合、异步消息、流量削锋等问题,实现高性能、高可用、可伸缩和最终一致性架构, ... [详细]
author-avatar
beilei_beike_516
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有