Spring Cloud - 消息总线(Bus)

一时失言乱红尘 2021-12-05 02:59 404阅读 0赞

在微服务架构的系统中,我们通常会使用轻量级的消息代理来构建一个共用的消息主题让系统中所有微服务实例都连接上来,由于该主题中产生的消息会被所有实例监听和消费,所以我们称它为消息总线。

消息代理

消息代理(Message Broker)是一种消息验证、传输、路由的架构模式。它在应用程序之间起到通信调度并最小化应用之间的依赖的作用,使得应用程序可以高效地解耦通信过程。消息代理是一个中间件产品,它的核心是一个消息的路由程序,用来实现接收和分发消息, 并根据设定好的消息处理流来转发给正确的应用。 它包括独立的通信和消息传递协
议,能够实现组织内部和组织间的网络通信。设计代理的目的就是为了能够从应用程序中传入消息,并执行一些特别的操作,下面这些是在企业应用中,我们经常需要使用消息代理的场景:

  • 将消息路由到一个或多个目的地。
  • 消息转化为其他的表现方式。
  • 执行消息的聚集、消息的分解,并将结果发送到它们的目的地,然后重新组合响应返回给消息用户。
  • 调用Web服务来检索数据。
  • 响应事件或错误。
  • 使用发布-订阅模式来提供内容或基千主题的消息路由。

目前已经有非常多的开源产品可以供大家使用, 比如:

  • ActiveMQ
  • Kafka
  • RabbitMQ
  • RocketMQ
如何使用RabbitMQ

Spring Cloud Bus使用了KafkaRabbitMQ做消息载体,本文以RabbitMQ为例。
如何使用RabbitMQ,可以参考我的这个仓库。

改造Config-Client

项目在Spring Cloud Config的基础上做修改。

  • 修改pom

要在pom里增加如下代码,因为RabbitMQ是基于amqp协议的。

  1. <dependency>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-starter-bus-amqp</artifactId>
  4. </dependency>
  • 修改bootstrap.yml

主要增加rabbitMQ的配置,完整的代码如下

  1. server:
  2. port: 8788
  3. spring:
  4. application:
  5. name: config-client
  6. cloud:
  7. bus:
  8. enabled: true
  9. trace:
  10. enabled: true
  11. config:
  12. label: master
  13. profile: dev
  14. discovery:
  15. enabled: true
  16. serviceId: config-server
  17. failFast: true
  18. rabbitmq:
  19. host: localhost
  20. port: 5672
  21. username: guest
  22. password: guest
  23. eureka:
  24. client:
  25. serviceUrl:
  26. defaultZone: http://localhost:8761/eureka/
  27. management:
  28. endpoints:
  29. web:
  30. exposure:
  31. include: bus-refresh
测试
  • 启动RabbitMQ

    程序目录

    cd /usr/local/sbin/

    启动

    sudo ./rabbitmq-server

    后台启动

    ./rabbitmq-server -detached

  • 依次启动eureka-server,config-server,config-clinet,访问localhost:8788/get

  • 然后更改git仓库的值,再次访问localhost:8788/bus/refresh,会看到界面的值发生了变化,获取到了更新后的值。
架构示意图

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,404人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Spring Cloud Bus(消息总线)(1)

    消息代理 消息代理是一种消息验证、传输、路由的架构模式。它在应用程序之间起到通信调度并最小化应用之间的依赖作用,使得应用程序可以高效地解耦通信过程。消息代理是一个中间件产