[SpringCloud学习笔记7]SpringCloud Bus入门及使用

94 篇文章 2 订阅
14 篇文章 0 订阅

SpringCloud Bus入门及使用

一、Bus简介

1.Bus功能

使用Bus和Config组合可以实现配置动态刷新

2.Bus形式

Bus整合了java事件处理机制和消息中间件功能

支持消息代理RabbitMQ和Kafka

3.总线概念

总线简而言之,就是用轻量级的消息代理构建一个共用的消息主题,让所有微服务实例对其进行订阅,被所有微服务实例所监听和消费,如果发生更改,可以广播给所有已订阅的微服务

二、Bus使用

首先前提是有一个3344的Config服务中心,一个3355的Config客户端和3366的Config客户端

设计总线的思想有两种:

  • 将消息传递给其中一个客户端,然后再对其他客户端进行感染
  • 将消息传给服务中心,然后对其他客户端进行广播

第二种方案比较好,因为消息服务中心和其他服务衔接好,也不需要其他特有功能.只需要发送给服务中心/bus/refresh端点,其他已订阅的服务端就能收到信息

1.改写服务中心3344

1.改写pom

加入依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
2.改写yml

配置rabbitMQ的配置

#配置RabbitMQ
  rabbitmq:
    port: 5672
    host: 192.168.1.50
    username: guest
    password: guest
    
#暴露刷新的监控端点
management:
  endpoints:
    web:
      exposure:
        include: 'bus-refresh'

总配置

server:
  port: 3344

spring:
  application:
    name:  cloud-config-center #注册进Eureka服务器的微服务名
  cloud:
    config:
      server:
        git:
          uri: https://github.com/xy19980319/springcloud-config #GitHub上面的git仓库名字
          ####搜索目录
          search-paths:
            - springcloud-config
      ####读取分支
      label: master
#配置RabbitMQ
  rabbitmq:
    port: 5672
    host: 192.168.1.50
    username: guest
    password: guest

#服务注册到eureka地址
eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka

#暴露刷新的监控端点
management:
  endpoints:
    web:
      exposure:
        include: 'bus-refresh'

2.改写客户端3355,3366

1.改写pom

加入依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
2.改写yml
#配置RabbitMQ
  rabbitmq:
    port: 5672
    host: 192.168.1.50
    username: guest
    password: guest

三、通知配置

1.广播通知

根据上面的配置,只需要运维发送一个post请求就能够广播给所有服务实例

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

2.定点通知

curl -X POST “http://localhost:{center}/actuator/bus/refresh/{destination}”

这里的占位符{center}是服务中心的端口号

{destination}是需要定点通知的服务端,服务名:端口号

例如如果只要通知3355,就要发送curl -X POST “http://localhost:3344/actuator/bus/refresh/config-client:3355”

四、总结

1.学习总结

Bus作为消息总线,可通过给Config服务中心(与外部相连)来通知所有Config客户端修改配置,可以广播,可以定点

广播通知方式是往 http://localhost:服务中心端口号/actuator/bus/refresh 发送post请求

定点通知方式是往 http://localhost:服务中心端口号/actuator/bus/refresh/服务名:端口号 发送post请求

2.注意事项

日志中warning:Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method ‘POST’ not supported],出现405,post请求不被允许.

{
"timestamp": “2020-06-26T16:32:05.517+0000”,
"status": 405,
"error": “Method Not Allowed”,
"message": "Request method ‘POST’ not supported"
}

如果出现了这样的情况,访问405,可以尝试这样修改,参考博客修改后还是无效,或者无法定点通知

#暴露刷新的监控端点
management:
  endpoints:
    web:
      exposure:
        include: "bus-refresh"
  endpoint:
    bus-env:
      enabled: true
    bus-refresh:
      enabled: true

最后我是通过还是和原来一样的配置,没什么修改的,但是要先将3344启动完全后,再一个个启动3355,3366就可以了。

#3344服务中心的yml配置
server:
  port: 3344

spring:
  application:
    name:  cloud-config-center #注册进Eureka服务器的微服务名
  cloud:
    config:
      server:
        git:
          uri: https://github.com/xy19980319/springcloud-config #GitHub上面的git仓库名字
          ####搜索目录
          search-paths:
            - springcloud-config
      ####读取分支
      label: master
  #配置RabbitMQ
  rabbitmq:
    host: 192.168.1.50
    port: 5672
    username: guest
    password: guest

#服务注册到eureka地址
eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka

#暴露刷新的监控端点
management:
  endpoints:
    web:
      exposure:
        include: 'bus-refresh'
#3355,3366结点
server:
  port: 3366

spring:
  application:
    name: config-client
  cloud:
    #Config客户端配置
    config:
      label: master #分支名称
      name: config #配置文件名称
      profile: dev #读取后缀名称   上述3个综合:master分支上config-dev.yml的配置文件被读取http://config-3344.com:3344/master/config-dev.yml
      uri: http://localhost:3344 #配置中心地址k

#配置RabbitMQ
  rabbitmq:
    port: 5672
    host: 192.168.1.50
    username: guest
    password: guest


#服务注册到eureka地址
eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka
#暴露监控端点
management:
  endpoints:
    web:
      exposure:
        include: "*"

对这个地方为什么会报出405,还是无法理解,如果有知道的大佬可否提点一二?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值