精华内容
下载资源
问答
  • Spring Cloud Bus消息总线

    2019-11-15 09:36:25
    文章目录Spring Cloud BusSpring Cloud Bus是什么Spring Cloud Bus的两种实现方式图解快速开始一个Spring Cloud BusSpring Cloud Bus的实例演示 Spring Cloud Bus是什么 Spring Cloud Bus叫事件总线,当我们的系统中...

    Spring Cloud Bus

    Spring Cloud Bus是什么

    Spring Cloud Bus叫事件总线,当我们的系统中服务越来越多之后,维护这样的刷新清单将会变得非常繁琐麻烦,而且容易犯错。Spring Cloud Bus使用 message broker 来连接分布式系统的所有节点。它可以用于广播配置文件的更改或者服务之间的通讯,也可以用于监控。本文要讲述的是用Spring Cloud Bus实现通知微服务架构的配置文件的更改。

    SpringCloud Bus会向外提供一个http接口,即下图中的/bus/refresh。我们将这个接口配置到git的webhook上,当git上的内容发生改变时,就会自动调用/bus/refresh接口。Bus就会通知ConfigServer,configserver会发布更新消息到消息总线的消息队列,其他服务订阅到该消息就会信息刷新,从而实现整个微服务进行自动刷新。

    Spring Cloud Bus的两种实现方式图解

    • f方法1 : 某个微服务承担刷新配置的任务

    ①提交配置出发post请求调用客户端A-3的/bus/refresh接口(spring boot 2.0.x以后是/actuator/bus-refresh)

    ②客户端A-3收到请求从Server端更新配置并且发送给Spring Cloud Bus消息总线

    ③Spring Cloud Bus接收消息并通知给其他连线在总线上的客户端,所有总线上的客户端均能接收到消息。

    ④其他客户端接收到消息,请求Server端获取最新配置

    ⑤全部客户端均获取到最新的配置

    以上方式存在两个问题

    1. 微服务本身是业务模块,而不应该承担配置刷新的职责,打破了微服务的单一原则.
    2. WebHook的配置也随着承担刷新配置的微服务节点发生变化.
    • 方法2: 配置中心Server端承担起配置刷新的职责

    ①提交配置触发post请求给server端的/bus/refresh接口(spring boot 2.0.x以后是/actuator/bus-refresh)

    ②server端接收到请求并发送给SpringCloud Bus总线

    ③Sping Cloud Bus接收到消息并通知给其他连接的总线的客户端

    ④其他客户端接收到通知,请求Server端获取最新配置

    ⑤全部客户端获取到最新的配置

    我们看到WebHook的直接请求server端,WebHook的配置不会发生变化,Server端承担起配置刷新的职责,不要业务端处理刷新了.完美解决上述的问题.

    快速开始一个Spring Cloud Bus

    Spring Cloud Bus通过添加Spring Boot自动配置,您需要做的是启用总线是将spring-cloud-starter-bus-amqpspring-cloud-starter-bus-kafka添加到您的依赖关系管理中,配置上RabbitMQ或Kafka环境,如果是配置RabbitMQ,application.yml中需添加RabbitMQ的配置信息,如下:

    spring:
      rabbitmq:
        host: mybroker.com
        port: 5672
        username: user
        password: secret
    

    /actuator/*执行器命名空间下还有一些http端点. /actuator/bus-refresh/{destination}和/actuator/bus-refresh.其中destination目的地是ApplicationContext ID,默认情况下,Spring Boot将ContextIdApplicationContextInitializer中的ID设置为spring.application.name,活动配置文件和server.port的组合。比如/actuator/bus-refresh?destination=customers:**" 即刷新服务名为customers的所有服务。/actuator/bus-refresh将重新加载每个应用程序的配置.一定要是Post请求,并且配置文件中加上注解如下:

    management.endpoints.web.exposure.include=bus-refresh

    Spring Cloud Bus的实例演示

    • 修改所有节点的配置
    1. 新建5个Demo放在github上 https://github.com/fangjian0423/rocketmq-binder-demo/tree/master/rocketmq-bus-demo
    2. 访问任意节点提供的 Controller 提供的获取配置的地址(key为hangzhou):
    curl -X GET 'http://localhost:10001/bus/env?key=hangzhou'
    

    所有节点返回的结果都是 unknown,因为所有节点的配置中没有 hangzhou 这个 key。

    1. Bus 内部提供了 EnvironmentBusEndpoint 这个 Endpoint 通过 message broker 用来新增/更新配置。

      访问任意节点该 Endpoint 对应的 url /actuator/bus-env?name=hangzhou&value=alibaba 进行配置项的新增(比如访问 node1 的url):

    curl -X POST 'http://localhost:10001/actuator/bus-env?name=hangzhou&value=alibaba' -H 'content-type: application/json'
    
    1. 再次访问所有节点 /bus/env 获取配置:
    $ curl -X GET 'http://localhost:10005/bus/env?key=hangzhou'
    alibaba%
    ~ ⌚
    $ curl -X GET 'http://localhost:10004/bus/env?key=hangzhou'
    alibaba%
    ~ ⌚
    $ curl -X GET 'http://localhost:10003/bus/env?key=hangzhou'
    alibaba%
    ~ ⌚
    $ curl -X GET 'http://localhost:10002/bus/env?key=hangzhou'
    alibaba%
    ~ ⌚
    $ curl -X GET 'http://localhost:10001/bus/env?key=hangzhou'
    alibaba%
    

    所有节点都新增了一个 key 为 hangzhou 的配置,且对应的 value 是 alibaba

    • 修改部分节点的配置
    1. 比如在 node1 上指定 destination 为 rocketmq-bus-node2 (node2 配置了 spring.cloud.bus.id 为 rocketmq-bus-node2:10002,可以匹配上) 进行配置的修改:
    curl -X POST 'http://localhost:10001/actuator/bus-env/rocketmq-bus-node2?name=hangzhou&value=xihu' -H 'content-type: application/json'
    
    1. 获取配置如下:
    $ curl -X GET 'http://localhost:10005/bus/env?key=hangzhou'
    alibaba%
    ~ ⌚
    $ curl -X GET 'http://localhost:10004/bus/env?key=hangzhou'
    alibaba%
    ~ ⌚
    $ curl -X GET 'http://localhost:10003/bus/env?key=hangzhou'
    alibaba%
    ~ ⌚
    $ curl -X GET 'http://localhost:10002/bus/env?key=hangzhou'
    xihu%
    ~ ⌚
    $ curl -X GET 'http://localhost:10001/bus/env?key=hangzhou'
    xihu%
    

    我们看到,只有 node1 和 node2 修改了配置,其余的 3 个节点配置未改变。node1的改变是因为在 node1 上发送消息,bus也会在node1进行配置修改.

    展开全文
  • springcloud bus

    2020-06-20 23:06:08
    springcloud bus spring cloud bus配合spring cloud config可以实现配置的动态刷新 作用: 管理和传播分布式系统间的消息 广播状态更改,事件推送等 做微服务间的通信通道 基本原理: configClient实例都监听MQ...

    springcloud bus

    spring cloud bus配合spring cloud config可以实现配置的动态刷新

    作用:

    • 管理和传播分布式系统间的消息
    • 广播状态更改,事件推送等
    • 做微服务间的通信通道

    基本原理:

    configClient实例都监听MQ中同一个topic(默认是springcloudBus)当一个服务刷新数据时,他会把这个消息放入到topic中,这样其他监听同一个topic的服务就能得到通知,然后去更新自身的配置

    原理

    demo搭建

    服务端搭建

    添加依赖:

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

    修改配置文件:

    server:
      port: 3355
    
    spring:
      application:
        name: cloud-config-center
      cloud:
        config:
          server:
            git:
              #uri: #Github上的git仓库名字
              uri: https://gitee.com/XXXXX/springcloud-config.git
              ##搜索目录.这个目录指的是github上的目录
              search-paths:
                - springcloud-config
              username: XXXXX
              password: XXXXX
          ##读取分支
          label: master
    #rabbit相关配置 15672是web管理界面的端口,5672是MQ访问的端口
      rabbitmq:
        host: localhost
        port: 5672
        username: guest
        password: guest
    
    eureka:
      client:
        service-url:
          defaultZone: http://eureka7779.com:7779/eureka/
    
    #rabbitmq相关设置 ,暴露 bus刷新配置的端点
    management:
      endpoints:
        web:
          exposure:
            include: 'bus-refresh'
    

    客户端搭建

    客户端修改pom文

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

    配置文件修改:

    server:
      port: 3366
    
    spring:
      application:
        name: config-client
      cloud:
        #Config客户端配置
        config:
          label: master #分支名称
          name: config #配置文件名称
          profile: dev #读取后缀名称 上诉3个综合就是 master分支上 config-dev.yml
          uri: http://config-3355.com:3355 # 配置中心地址
      #rabbit相关配置 15672是web管理界面的端口,5672是MQ访问的端口
      rabbitmq:
        host: localhost
        port: 5672
        username: guest
        password: guest
    eureka:
      client:
        service-url:
          defaultZone:  http://eureka7779.com:7779/eureka/
    #暴露监控端点
    management:
      endpoints:
        web:
          exposure:
            include: "*"
    

    测试:
    在这里插入图片描述

    修改配置为bus:
    在这里插入图片描述

    此时,bus的优势就是对比原来的config需要有多少机器就curl多少次,bus只需要手动一次curl即可

    在这里插入图片描述
    结果:

    在这里插入图片描述

    展开全文
  • Spring Cloud - Bus

    2020-08-23 21:36:22
    Spring Cloud Bus Spring Cloud BusSpringSpring Cloud Stream 基础上分装的消息总线组件。 Spring Cloud Bus 将分布式系统中的各节点通过轻量级的消息通道(broker)连接起来, 基于此广播消息,协调各节点...

    Spring Cloud Bus

    Spring Cloud Bus 是 Spring 在 Spring Cloud Stream 基础上分装的消息总线组件。

    Spring Cloud Bus 将分布式系统中的各节点通过轻量级的消息通道(broker)连接起来,
    基于此广播消息,协调各节点运行。

    Spring Cloud Bus 目前有两个实现,/actuator/bus-env/actuator/bus-refresh,分别对应各节点的 /actuator/env/actiator/refresh 功能。

    如何引入?

    • 根据依赖的 MQ 的不同,引入依赖 org.springframework.cloud:spring-cloud-starter-bus-amqporg.springframework.cloud:spring-cloud-starter-bus-kafka
    • 配置 MQ 连接属性。
    展开全文
  • SpringCloud之Bus

    2019-12-27 15:23:55
    Spring CloudBus 使用Bus实现通知微服务架构配置文件更改 架构分析 Spring CloudBus Spring Cloud Bus将分布式的节点用轻量的消息代理连接起来。它可以用于广播配置文件的更改或者服务之间的通讯,也可以用于...

    目录

    Spring Cloud Bus

    使用Bus实现通知微服务架构配置文件更改

    架构分析


    Spring Cloud Bus

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

    使用Bus实现通知微服务架构配置文件更改

    • 引入依赖:spring-cloud-starter-bus-amqp(bus依赖);spring-boot-starter-actuator(统计监控)
    • 添加配置:加上bus及RabbitMq的配置
    spring.rabbitmq.host=localhost
    spring.rabbitmq.port=5672
    spring.rabbitmq.username=guest
    spring.rabbitmq.password=guest
    
    spring.cloud.bus.enabled=true
    spring.cloud.bus.trace.enabled=true
    management.endpoints.web.exposure.include=bus-refresh
    • 添加注解:启动类加注解@RefreshScope

    更改配置文件值,传统做法需重启服务器才能达到配置文件的更新;而此时,我们只需要发送post请求:http://localhost:8881/actuator/bus-refresh,你会发现config-client会重新读取配置文件。

    actuator/bus-refresh接口可以指定服务,即使用”destination”参数,比如 “/actuator/bus-refresh?destination=customers:**” 即刷新服务名为customers的所有服务

    架构分析

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

    原文地址

    展开全文
  • 消息总线 Spring Cloud Bus SpringCloud Bus,解决上述问题,实现配置自动更新。 注意:SpringCloudBus基于RabbitMQ实现,默认使用本地的消息队列服务,所以需要提前安装并启动RabbitMQ。安装参考./04资料/安装...
  • 文章目录Spring Cloud BusSpring Cloud Bus使用机制Spring Cloud Bus 实战Postman测试工具安装RabbitMQ的安装Erlang的安装、配置环境变量运行RabbitMQ安装程序配置Config客户端功能测试 Spring Cloud Bus Spring ...
  • Spring Cloud面试题(2020最新版)

    万次阅读 多人点赞 2020-02-19 17:51:59
    文章目录为什么需要学习Spring Cloud什么是Spring Cloud设计目标与优缺点设计目标优缺点Spring Cloud发展前景整体架构主要项目Spring Cloud ConfigSpring Cloud NetflixSpring Cloud BusSpring Cloud ConsulSpring ...
  • Spring Cloud Bus 将分布式的节点和轻量的消息代理连接起来。这可以用于广播配置文件的更改或者其他的管理工作。一个关键的思想就是,消息总线可以为微服务做监控,也可以作为应用程序之间相互通讯。本文要讲述的是...
  • Spring Cloud Bus Spring cloud bus通过轻量消息代理连接各个分布的节点。这会用在广播状态的变化(例如配置变化)或者其他的消息指令。Spring bus的一个核心思想是通过分布式的启动器对spring boot应用进行扩展,也...
  • Spring Cloud Bus

    千次阅读 2017-08-24 18:17:21
    发博词Spring生态消息中间件相关几个项目如下spring messaging,spring integration,spring cloud stream,spring cloud bus,项目是从前到后一次构建,后面的依赖前面的项目。本文重点介绍下spring cloud bus。...
  • 一)什么是SpringCloudBus Spring云总线使用轻量级消息代理链接分布式系统的节点。然后可以用它广播状态更改(例如配置更改)或其他管理指令。目前唯一的实现是使用AMQP代理作为传输,但是相同的基本功能集(以及更多...
  • 1.为什么需要Spring Cloud Bus 如果需要客户端获取到最新的配置信息需要执行refresh,我们可以利用webhook的机制每次提交代码发送请求来刷新客户端,当客户端越来越多的时候,需要每个客户端都执行一遍,这种方案就...
  • spring-cloud-busSpring Cloud事件总线
  • SpringCloud Bus

    2021-03-24 10:29:24
    目录SpringCloud Bus@[Mr_Wzzzz]概述什么是总线SpringCloud Bus动态刷新全局广播配置SpringCloud Bus动态刷新定点通知 概述 用SpringCloud Config时,我们可以实现配置信息手动的动态刷新,也就是远端配置信息发生...
  • SpringCloud之一消息总线组件SpringCloudBus消息总线组件SpringCloudBusSpringCloudBus简介代码实现配置服务端配置客户端自定义配置的读取完成十次方工程的配置集中管理 消息总线组件SpringCloudBus SpringCloud...
  • spring cloud bus原理总结

    2017-11-14 18:32:00
    1、spring cloud bus  spring cloud是按照spring的配置对一系列微服务框架的集成,spring cloud bus是其中一个微服务框架,用于实现微服务之间的通信。 spring cloud bus整合 java的事件处理机制和消息中间件消息...
  • 一、消息总线 在微服务架构的系统中,我们通常会使用轻...spring cloud bus整合 java的事件处理机制和消息中间件消息的发送和接受,主要由发送端、接收端和事件组成。针对不同的业务需求,可以设置不同的事件,发送...
  • springcloudbus使用轻量级消息代理将分布式系统的节点连接起来。然后,可以使用它来广播状态更改(例如配置更改)或其他管理指令。AMQP和Kafka broker实现包含在项目中。或者,在类路径上找到的任何springcloudstream...
  • 1.什么是Bus https://spring.io/projects/spring-cloud-bus springcloudbus使用轻量级消息代理将分布式系统的节点... 通俗定义: bus称之为springcloud中消息总线,主要用来在微服务系统中实现远端配置更新时通
  • spring cloud bus 1、广播,例如:配置统一管理 2、监控 spring cloud stream spring cloud stream介绍: http://www.jianshu.com/p/fb7d11c7f798 Spring Cloud Stream is a framework for building message...
  • springcloud bus 总pom

    2017-09-09 11:11:17
    springcloud bus 总父pom 配置文件 springcloud bus 总父pom 配置文件 springcloud bus 总父pom 配置文件 springcloud bus 总父pom 配置文件
  • 什么是消息总线 消息代理中间件构建一个共用的消息主题让所有微服务实例订阅,当该消息主题产生消息时会被所有...Spring Cloud BusSpring Cloud 体系内的消息总线,用来连接分布式系统的所有节点。 Spring Cloud
  • 问题描述: 项目服务与config配置中心加入spring cloud bus实现配置动态加载。 spring boot 版本: spring cloud 版本: 工程服务与配置中心都引入相关依赖与配置启动项目报错: Caused by: java.lang....
  • springcloudConfig 手动刷新的问题: 假如有多个客户端3344、3366、3377...SpringCloud Bus 配合 SpringCloud Config可以实现配置的动态刷新 1、SpringCloud Bus 消息总线 1.1 基本概念 Bus支持两种消息代理:Rabbit...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,844
精华内容 9,537
关键字:

busspring

spring 订阅