Spring Cloud - 消息总线(Bus)
在微服务架构的系统中,我们通常会使用轻量级的消息代理来构建一个共用的消息主题让系统中所有微服务实例都连接上来,由于该主题中产生的消息会被所有实例监听和消费,所以我们称它为消息总线。
消息代理
消息代理(Message Broker)是一种消息验证、传输、路由的架构模式。它在应用程序之间起到通信调度并最小化应用之间的依赖的作用,使得应用程序可以高效地解耦通信过程。消息代理是一个中间件产品,它的核心是一个消息的路由程序,用来实现接收和分发消息, 并根据设定好的消息处理流来转发给正确的应用。 它包括独立的通信和消息传递协
议,能够实现组织内部和组织间的网络通信。设计代理的目的就是为了能够从应用程序中传入消息,并执行一些特别的操作,下面这些是在企业应用中,我们经常需要使用消息代理的场景:
- 将消息路由到一个或多个目的地。
- 消息转化为其他的表现方式。
- 执行消息的聚集、消息的分解,并将结果发送到它们的目的地,然后重新组合响应返回给消息用户。
- 调用Web服务来检索数据。
- 响应事件或错误。
- 使用发布-订阅模式来提供内容或基千主题的消息路由。
目前已经有非常多的开源产品可以供大家使用, 比如:
- ActiveMQ
- Kafka
- RabbitMQ
- RocketMQ
- …
如何使用RabbitMQ
Spring Cloud Bus使用了Kafka
或RabbitMQ
做消息载体,本文以RabbitMQ
为例。
如何使用RabbitMQ,可以参考我的这个仓库。
改造Config-Client
项目在Spring Cloud Config的基础上做修改。
- 修改pom
要在pom里增加如下代码,因为RabbitMQ是基于amqp
协议的。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
- 修改bootstrap.yml
主要增加rabbitMQ的配置,完整的代码如下
server:
port: 8788
spring:
application:
name: config-client
cloud:
bus:
enabled: true
trace:
enabled: true
config:
label: master
profile: dev
discovery:
enabled: true
serviceId: config-server
failFast: true
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
management:
endpoints:
web:
exposure:
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
,会看到界面的值发生了变化,获取到了更新后的值。
还没有评论,来说两句吧...