SpringCloud消息总线

在微服务架构中,通常会使用轻量级的消息代理来构建一个共用的消息主题来连接各个微服务实例,它广播的消息会被所有在注册中心的微服务实例监听和消费,也称消息总线。
SpringCloud中也有对应的解决方案,SpringCloud Bus 将分布式的节点用轻量的消息代理连接起来,可以很容易搭建消息总线,配合SpringCloud config 实现微服务应用配置信息的动态更新。


消息代理属于中间件。设计代理的目的就是为了能够从应用程序中传入消息,并执行一些特别的操作。开源产品很多如ActiveMQ、Kafka、RabbitMQ、RocketMQ等
目前springCloud仅支持RabbitMQ和Kafka。本文采用RabbitMQ实现这一功能。


RabbitMQ实现

RabbitMQ是实现了高级队列协议的(AMQP)的开源消息代理软件,也称面向消息中间件。采用Erlang语言编写。
AMQP是Advanced Message Queuing Protocol 简称,是一个面向消息中间件的开放式标准应用层协议。定义了以下特性:
消息方向、消息队列、消息路由、可靠性、安全性

AMQP要求消息的提供者和客户端接收者的行为要实现对不同供应商可以用相同的方式(SMTP、HTTP、FTP等)进行互相操作。AMQP是一个线路级协议,是通过网络发送的数据传输格式。因此符合该数据格式的消息发送和接收工具都能互相兼容和操作。轻易地实现跨计数平台的架构方案。

RabbitMQ以AMQP协议实现,因此支持多操作系统,多编程语言,几乎覆盖了所有主流的企业级技术平台,在微服务架构消息中间件的选择中很有优势。springCloud Bus中也包含了对Rabbit的自动化默认配置。

安装
Erlang : http://www.erlang.org/downloads
RabbitMQ : https://www.rabbitmq.com/download.html
rabbitmq安装路径不要包含中文,会启动失败

本次采用Erlang/OTP19.1 RabbitMQ Server 3.6.11

开始

Eureka-Server 注册中心未做改动
config-server 配置中心 application.yml 采用远程仓库

eureka.client.serviceUrl.defaultZone: http://localhost:8761/eureka/
spring.application.name=config-server
server.port=8888

spring.cloud.config.server.git.uri=https://github.com/43942692/First/tree/master/config-repo
spring.cloud.config.server.git.searchPaths=respo
spring.cloud.config.label=master
spring.cloud.config.server.git.username=your username
spring.cloud.config.server.git.password=your password

远程仓库中的config-client-dev.properties文件中有一个属性:
foo= foo version 132456

cloud-simple-service pom文件中增加

    <!--加入AMQP**rabbitMQ-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-bus-amqp</artifactId>
    </dependency>

bootstrap.properties内容如下
注意:config的相关配置会先于application.properties,而bootstrap.properties的加载也是先于application.properties。

这里写图片描述

启动eureka-Server 启动config-Server

测试 config-Server

访问http://localhost:8888/cloud-config-dev.properties
如果能出现文件的配置信息则说明已经成功和获取了git仓库配置信息

启动cloud-simple-servie 端口号为8882
访问http://localhost:8882/hi
回复为 foo version 132456
修改远程仓库文件信息foo= foo version 654321
再次访问 回复 foo version 132456 发现都没有更新,传统做法是重启服务来接收更新,
现在可以发送http://localhost:8882/bus/refresh
查看后台发现cloud-simple-service在重新读取配置文件
再次访问,回复 foo version 654321 与远程仓库属性一致

/bus/refresh接口可以指定服务,即使用”destination”参数,比如/bus/refresh?destination=customers 即刷新服务名为customers的所有服务,不管ip

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值