700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > SpringCloud Bus消息总线

SpringCloud Bus消息总线

时间:2021-05-27 20:07:44

相关推荐

SpringCloud Bus消息总线

目录

是什么?

如何使用?

Docker安装RabbitMQ

SpringCloud Bus动态刷新全局广播

SpringCloud Bus动态刷新定点通知

是什么?

SpringCloud Bus是用来将分布式系统的节点与轻量级系统链接起来的一个框架,它整合了Java的事件处理机制和消息中间件的功能,SpringCloud Bus能管理和传播分布式系统间的消息,就像一个分布式执行器,可用于广播状态更改、事件推送等,也可以当作微服务间的通信通道

SpringCloud Bus配合SpringCloud Config使用可以实现配置的动态刷新,Bus支持两种消息代理:RabbitMQ和Kafka

如何使用?

Docker安装RabbitMQ

在Linux的docker里拉取RabbitMQ镜像docker pull rabbitmq:3.8.3-management(management是带web的管理界面)

[root@iZbp12fj4dxm8z5uofcvshZ ~]# docker pull rabbitmq:3.8.3-management3.8.3-management: Pulling from library/rabbitmq23884877105a: Pull complete bc38caa0f5b9: Pull complete 2910811b6c42: Pull complete 36505266dcc6: Pull complete 15c38f93e1dd: Pull complete 3d3f9ad120a1: Pull complete 5b6fe3271410: Pull complete f19a60139bb3: Pull complete 6473f260fa7d: Pull complete c6bfc255d245: Pull complete ab9457e6d377: Pull complete 6b744fa5d23e: Pull complete Digest: sha256:2895b23e08cd7fa0615d39147c1746908b0cb8064e9fbbf7770619651b501814Status: Downloaded newer image for rabbitmq:3.8.3-managementdocker.io/library/rabbitmq:3.8.3-management

如果报了下面的错误

[root@iZbp12fj4dxm8z5uofcvshZ ~]# docker pull ribbitmq:3.8.3-managementError response from daemon: pull access denied for ribbitmq, repository does not exist or may require 'docker login': denied: requested access to the resource is denied

注册一个账号,登录即可

运行RibbitMQ,注意:15672是web端访问可视化界面时使用的端口

[root@iZbp12fj4dxm8z5uofcvshZ ~]# docker imagesREPOSITORY TAGIMAGE ID CREATED SIZEdocker-web latest 83e2b1e93d3d 12 days ago661MBtomcat latest b0e0b0a92cf9 3 weeks ago680MBrabbitmq3.8.3-management 867da7fcdf92 18 months ago 181MBredis 5.0.9-alpine3.11 3661c84ee9d0 19 months ago 29.8MBjava 8 d23bdf5b1b1b 4 years ago643MB[root@iZbp12fj4dxm8z5uofcvshZ ~]# docker run -d --name ribbitmq-bus -p 5673:5672 -p 15671:15672 867da7fcdf92514256b561f87a0589a9d6ef4c914977aa3929ac1c3f758e796b957640e09f5f[root@iZbp12fj4dxm8z5uofcvshZ ~]# docker ps -aCONTAINER ID IMAGECOMMAND CREATED STATUS PORTS NAMES514256b561f8 867da7fcdf92 "docker-entrypoint.s…" 7 seconds ago Up 6 seconds 4369/tcp, 5671/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:5673->5672/tcp, 0.0.0.0:15671->15672/tcp ribbitmq-bus352322c01534 docker-web"java -jar /app.jar …" 12 days agoUp 22 hours 0.0.0.0:49160->8080/tcpchen-springboot-docker

在浏览器地址栏输入http://10.211.55.17:15671访问RabbitMQ的管理页面,用户名和密码默认guest(如果是远程服务器,需要进安全组开放端口)

SpringCloud Bus动态刷新全局广播

具备良好的RibbitMQ环境设计思想:利用消息总线触发一个服务端/ConfigServer/bus/refresh,而刷新所有客户端的配置演示广播效果,增加复杂度,以3355为模板再制作一个3366给cloud-config-center-3344配置中心服务端添加消息总线支持给cloud-config-client-3355客户端添加消息总线支持给cloud-config-client-3366客户端添加消息总线支持测试一次修改,广播通知,处处生效

1.按照3355新建3366

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

pom文件

<!--添加消息总线RabbitMQ的支持--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bus-amqp</artifactId></dependency>

yml文件(最终版)

server:port: 3344spring:application:name: cloud-config-center # 注册进Eureka服务器的微服务名cloud:config:server:git:uri: /chenstudyJava/springcloud-config.git # git的仓库地址search-paths: # 搜索目录- springcloud-configlabel: master # 读取的分支rabbitmq:host: 112.124.16.82 # 本机写localhost,远程服务器的写服务器地址port: 5673 # 客户端和RabbitMQ进行通信的端口username: guest # 默认也是guestpassword: guest # 默认也是guesteureka:client:service-url:defaultZone: http://localhost:7001/eureka # 服务注册到的eureka地址# RabbitMQ相关配置management:endpoints: # 暴露bus刷新配置的端点web:exposure:include: 'bus-refresh'

3.给cloud-config-client-3355/3366客户端添加消息总线支持

pom文件

<!--添加消息总线RabbitMQ的支持--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bus-amqp</artifactId></dependency>

yml文件

server:port: 3355spring:application:name: config-clientcloud:# config客户端配置config:# 这三个综合:master分支上的config-dev.yml的配置文件被读取到# http://config-:3344/master/config-dev.ymllabel: master # 分支名称name: config # 配置文件名称profile: dev # 读取后缀名称uri: http://localhost:3344 # 配置中心地址rabbitmq:host: 112.124.23.82 # 本机写localhost,服务器的写服务器地址port: 5673 # 客户端和RabbitMQ进行通信的端口username: guest # 默认也是guestpassword: guest # 默认也是guesteureka:client:service-url:defaultZone: http://localhost:7001/eureka # 服务注册到的eureka地址# 暴露监控端点management:endpoints:web:exposure:include: "*"

4.测试启动7001,3344,3355,3366,一次修改,广播通知,处处生效

这里我在启动3366的时候报错了:错误如下

Failed to execute goal org.apache.maven.plugins:maven-install-plugin:2.4:install (default-install) on project cloud-config-client-3366:Failed to install metadata com.IT.springcloud:cloud-config-client-3366:1.0-SNAPSHOT/maven-metadata.xml: Could not parse metadata D:\.m2\com\IT\springcloud\cloud-config-client-3366\1.0-SNAPSHOT\maven-metadata-local.xml: only whitespace content allowed before start tag and not \u0 (position: START_DOCUMENT seen \u0.无法执行goal org.apache.maven.plugins:maven安装插件:2.4:install(默认安装)在项目cloud-config-client-3366上:未能安装元数据com.IT.springcloud:cloud-config-client-3366:1.0-SNAPSHOT/maven-metadata.xml:无法分析元数据D:\.m2\com\IT\springcloud\cloud-config-client-3366\1.0-SNAPSHOT\maven-metadata-local.xml:仅允许在开始标记之前使用空格内容,而不允许\u0(位置:开始\u已看到文档\u0

好家伙,我只记得那天电脑突然卡住,然后就重启,各种卡死!!!好吧,还是先把问题解决了,上CSDN搜索了一下,应该是这个maven-metadata-local.xml文件有问题,快刀斩乱麻,删掉!!!(浪费好多时间)然后清理、重新启动项目解决了!嘿嘿!

修改GitHub上的版本号,在终端(cmd命令窗口)输入下面命令发送post请求:

E:\>curl -X POST "http://localhost:3344/actuator/bus-refresh"E:\>

在浏览器地址栏分别输入:localhost:3355/configInfo,localhost:3366/configInfo

serverport:3355 configInfo:master branch,springcloud-config/config-dev.yml version=2serverport:3366 configInfo:master branch,springcloud-config/config-dev.yml version=2

其实吧,收到通知的客户端都同时订阅了一个topic交换机

SpringCloud Bus动态刷新定点通知

指定具体某一个实例生效而不是全部实例都生效公式:http://localhost:配置中心的端口号/sctuator/bus-refresh/{destination}/bus/refresh请求将不再发送到具体的服务实例上,而是发给config server并通过destination参数来指定需要更新配置的服务或实例

不信来弄个测试:

1.修改Github上的版本号(我改为3)

2.在终端(cmd命令窗口)输入:

E:\>curl -X POST "http://localhost:3344/actuator/bus-refresh/config-client:3355"E:\>

然后重新浏览器地址栏分别输入:localhost:3355/configInfo,localhost:3366/configInfo

# 返回结果serverport:3355 configInfo:master branch,springcloud-config/config-dev.yml version=3serverport:3366 configInfo:master branch,springcloud-config/config-dev.yml version=2

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。