java消息总线ibus_SpringCloud Bus 消息总线

java消息总线ibus_SpringCloud Bus 消息总线一 能干嘛 二 什么是总线 三 动态刷新全局广播注意 必须先具备良好的 RabbitMQ 环境演示广播效果 增加复杂度 再以 3355 为模板再制作一个 33661 新建 cloud config client 33661 POMcloud2020 atguigu springcloud1 0 SNAPSHOT4 0 0cloud config client org springframew

一、能干嘛?

60c935374921f60c109066fb6e260f41.png

3b475c1bc639d7019554e11c3ca09f10.png

二、什么是总线?

3ca52e64e1645103c4b09978f5c924e1.png

三、动态刷新全局广播

注意:必须先具备良好的RabbitMQ环境

演示广播效果,增加复杂度,再以3355为模板再制作一个3366

1、新建cloud-config-client-3366

1)POM

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

cloud2020

com.atguigu.springcloud

1.0-SNAPSHOT

4.0.0

cloud-config-client-3366

8

8

org.springframework.cloud

spring-cloud-starter-config

org.springframework.cloud

spring-cloud-starter-netflix-eureka-client

com.atguigu.springcloud

cloud-api-commons

${project.version}

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-actuator

org.springframework.boot

spring-boot-devtools

runtime

true

org.projectlombok

lombok

true

org.springframework.boot

spring-boot-starter-test

test

pom文件

2)YML

server:

port: 3366

spring:

application:

name: config-client

cloud:

config:

label: master

name: config

profile: dev

uri: http://localhost:3344

eureka:

client:

service-url:

defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka

management:

endpoints:

web:

exposure:

include: “*”

3)主启动

@EnableEurekaClient

@SpringBootApplicationpublic classConfigClientMain3366 {public static voidmain(String[] args) {

SpringApplication.run( ConfigClientMain3366.class,args);

}

}

4)controller

@RestController

@RefreshScopepublic classConfigClientController {

@Value(“${server.port}”)privateString serverPort;

@Value(“${config.info}”)privateString configInfo;

@GetMapping(“/configInfo”)publicString getConfigInfo(){return “serverPort:”+serverPort+”\t\n\n configInfo: “+configInfo;

}

}

2、设计思想

1) 利用消息总线触发一个客户端/bus/refresh,进而刷新所有客户端的配置

c90c44dae8b847cede8d4e130bd19f5d.png

2) 利用消息总线触发一个服务端ConfigServer的/bus/refresh端点,进而刷新所有客户端的配置(更加推荐)

7518818f3e4fb43aedae5c9128135c03.png

图二的架构显然更加合适,图一不适合的原因如下

打破了微服务的职责单一性,因为微服务本身是业务模块,它本不应该承担配置刷新职责

破坏了微服务各节点的对等性

有一定的局限性。例如,微服务在迁移时,它的网络地址常常会发生变化,此时如果想要做到自动刷新,那就会增加更多的修改

3、代码改造

1)给cloud-config-center-3344配置中心服务端添加消息总线支持

POM

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

org.springframework.cloud

spring-cloud-starter-bus-amqp

增加mq依赖

YML

server:

port:3344spring:

application:

name: cloud-config-center

cloud:

config:

server:

git:

uri: https://github.com/jwen1994/sprincloud-config.git

search-paths:- springcloud-config

username:@.com

password: wj_

label: master

rabbitmq:

host:192.168.216.130

port: 5672username: admin

password: password

eureka:

client:

service-url:

defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka

management:

endpoints:

web:

exposure:

include: “bus-refresh”

2)给cloud-config-center-3355客户端添加消息总线支持

POM

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

org.springframework.cloud

spring-cloud-starter-bus-amqp

增加mq依赖

YML

server:

port:3355spring:

application:

name: config-client

cloud:

config:

label: master

name: config

profile: dev

uri: http://localhost:3344

rabbitmq:

host: 192.168.216.130

port: 5672username: admin

password: password

eureka:

client:

service-url:

defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka

management:

endpoints:

web:

exposure:

include:”*”

3)给cloud-config-center-3366客户端添加消息总线支持

POM

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

org.springframework.cloud

spring-cloud-starter-bus-amqp

增加mq依赖

YML

server:

port:3366spring:

application:

name: config-client

cloud:

config:

label: master

name: config

profile: dev

uri: http://localhost:3344

rabbitmq:

host:192.168.216.130port:5672username: admin

password: password

eureka:

client:

service-url:

defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka

management:

endpoints:

web:

exposure:

include:”*”

4、测试

修改Github上配置文件增加版本号

curl -X POST “http://localhost:3344/actuator/bus-refresh”

一次发送,处处生效

四、动态刷新定点通知

不想全部通知,只想定点通知

只通知3355

不通知3366

公式:http://配置中心IP地址/actuator/bus-refresh/{destination}

/bus/refresh请求不再发送到具体的服务实例上,而是发给config server并通过destination参数类指定需要更新配置的服务或实例

我们这里以刷新运行在3355端口上的config-client为例

curl -X POST “http://localhost:3344/actuator/bus-refresh/config-client:3355”

48b34f311d50363f0b26be32e658331e.png

五、总结

a793433067e17e0163f6a76523d6c7bb.png

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/227743.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午8:38
下一篇 2026年3月16日 下午8:39


相关推荐

  • 国内怎么使用manus

    国内怎么使用manus

    2026年3月15日
    5
  • Tomcat8zip版本安装与配置[通俗易懂]

    Tomcat8zip版本安装与配置[通俗易懂]Tomcat8zip版本安装配置哈哈哈,又到了紧张刺激的每日必答:在开始之前呢,小Du来来带大家了解几个问题,希望能够在面试中,小Du的解答给你帮助。老样子,话不多说直接上图1.什么Tomcat:答:简单总结下,tomcat是一个中间件,在B/S架构中,浏览器发出的http请求经过tpmcat中间件,转发到最终的目的服务器上,响应消息再通过tomcat返回给浏览器。tomcat所做的事情主要有:开启监听端口监听用户的请求,解析用户发来的http请求然后访问到你指定的应用系统,然后你返回的页面经过t

    2022年6月12日
    28
  • 人力外包 vs 软件外包

    人力外包 vs 软件外包A公司:大外包公司,人力外包,号称有7000多员工,外派某国内银行IT部门工作,开工资10KB公司:小外包公司(外企性质,需要英语能力),软件外包(类似竞标,把项目拿到本公司来做),200员工,发包方是国外大银行,开工资12K。PS:6年JAVA经验这个该选那个好?从职业生涯、稳定性等方面考虑!…

    2022年5月19日
    42
  • pycharm减少缩进快捷键_怎么取消整段缩进

    pycharm减少缩进快捷键_怎么取消整段缩进Pycharm整体缩进:选择要缩进的段落,按tab整体取消缩进tab+shift

    2022年8月25日
    18
  • Jtag接口定义及含义

    Jtag接口定义及含义JTAG 各类接口针脚定义及含义 nbsp JTAG 有 10pin 的 14pin 的和 20pin 的 尽管引脚数和引脚的排列顺序不同 但是其中有一些引脚是一样的 各个引脚的定义如下 一 引脚定义 TestClockInp TCK 强制要求 1TCK 在 IEEE1149 1 标准里是强制要求的 TCK 为 TAP 的操作提供了一个独立的 基本的时钟信号 TAP 的所有操作都是

    2026年3月19日
    2
  • java文件传输接口

    java文件传输接口跨系统的文件传输 上传 接口在系统开发中经常遇见在不同的系统 如安卓和 web 端 的文件上传 有两种方法 第一种 如果图片比较小可以采用 post 方式将图片转成 base64 的码放在 data 域中 以字符串传参的方式发送到指定的接口取出其值 多个就采用数组 这种一般试用与仅仅图片上传 且图片比较小大约 10kbz 左右太大了 base64 位比较都 http 传输数据太大 导致不能进入指定接口 第二种 采用

    2026年3月19日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号