100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > SpringCloud config 配置中心集群配置以及整合消息总线BUS实现关联微服务配置自动刷新

SpringCloud config 配置中心集群配置以及整合消息总线BUS实现关联微服务配置自动刷新

时间:2019-02-20 19:53:59

相关推荐

SpringCloud config 配置中心集群配置以及整合消息总线BUS实现关联微服务配置自动刷新

一、SpringCloud Config 基本配置中的问题

在上一章节《SpringCloud config 配置中心介绍与基本配置使用》中我们现实了配置中心的配置集中管理、调用微服务应用接口动态刷新微服务应用配置信息。但是如果我们微服务应用比较多的情况下,当我们修改了多个应用的配置时,则需要我们对每个应用进行请求刷新配置,还是很不方便的,所以这时我们如果可以实现刷新一次,全部应用都配置可以更新生效的话,则会方便很多。另外在上一个章节项目中我们在生产者微服务配置信息中配置 configserver 应用信息时 使用的为固定ip端口信息。如果改节点服务器挂掉,则会直接影响配置该应用的微服务获取配置信息。那么我们改如何解决上面两个问题呢,本章下面则为大家介绍如何对之前的基本配置项目进行升级改造。

二、高可用集群的搭建

配置中心服务端的集群高可用配置思路为,我们将注册中心服务端也注册到Eureka注册中心中。在微服务应用中通过修改其ip端口为服务名称的方式来实现配置中心服务端的高可用。挂掉一台集群,还有其他服务端可以提供服务。改造前后系统结构如下:

1,服务端改造步骤

添加Eureka依赖修改服务端配置文件,注册Eureka复制一个子mode工程,进行集群启动,修改config server端口

步骤一、添加Eureka依赖

<?xml version="1.0" encoding="UTF-8"?><project xmlns="/POM/4.0.0"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"><parent><artifactId>SpringCloud</artifactId><groupId>com.xiaohui.springCloud</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>config_server</artifactId><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId></dependency><!--高可用改造 --><!-- Eureka 客户端 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency></dependencies></project>

步骤二、修改服务端配置文件,注册Eureka

server:port: 9999spring:application:name: config-server #服务名称cloud:config:server:git:uri: http://admin@127.0.0.1:10001/r/SpringCloud/config_server.gitusername: adminpassword: admin#接入到eureka 注册中心上eureka:client:register-with-eureka: truefetch-registry: trueservice-url:defaultZone: :9000/eureka/instance:prefer-ip-address: true #使用ip进行注册instance-id: ${spring.cloud.client.ip-address}:${server.port} #向注册中心注册服务ID

步骤三、复制一个工程进行重命名,修改其maven中<artifactId>config_server2</artifactId>,在父工程中添加其子模块。或者重新创建一个一模一样的也可以。并修改其配置文件中端口。

2,生产者微服务config客户端改造:

主需要修改配置文件bootstrap.yml即可。

spring:cloud:config:name: application #对应git上文件名的前部分profile: prd #git 上配置文件名的后部分label: master #git分支#uri: http://127.0.0.1:9999#通过注册中心获取配置中心 配置discovery:enabled: true # 开启服务发现service-id: config-server #配置中心的服务名称# 由于不使用直接从固定ip的配置中心节点拿配置,通过eureka获取,则此处需要吧eureka的配置从配置中心中进行提前eureka:client:fetch-registry: trueregister-with-eureka: trueservice-url:defaultZone: :9000/eureka/instance:prefer-ip-address: trueinstance-id: ${spring.cloud.client.ip-address}:${server.port}#开启动态刷新的请求路径端点management:endpoints:web:exposure:include: refresh

上面中主要 注释了spring.cloud.config.uri 部分,并使用了spring.cloud.config.discovery来进行配置其获取配置的服务为从注册中心获取,服务名称为 config-server。

测试:启动Eureka,在分别启动两个配置中心,在启动生产者工程。访问测试地址:http://127.0.0.1:8002/payment/get/name。可以正常访问。当我们停掉一台config服务端,修改配置,重新刷新生产者工程refresh地址,仍可以更新配置信息。

三、整合消息总线BUS实现配置中心刷新,驱动所有微服务配置获取刷新

解决配置修改需要调用每个微服务接口,我们改造的思路为对配置中心服务端进行发送post请求,然后通过消息总线方式通知每个微服务。微服务在调用配置中心服务端接口获取并更新应用配置和本地缓存。

1,服务端改造

主要步骤:

添加消息总线依赖、以及rabbitmq相关依赖修改配置文件 配置刷新配置请求地址、rabbitmq 信息

服务端添加依赖:

<!-- 消息总线 实现刷新配置中心通知所有微服务应用 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-bus</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-stream-binder-rabbit</artifactId></dependency>

配置文件添加配置信息:

spring: rabbitmq:addresses: 192.168.17.132username: guestpassword: guest#通过加入消息总线bus 实现配置中心一处刷新来驱动所有微服务进行获取更新配置management:endpoints:web:exposure:include: bus-refresh

2,客户端改造

主要步骤:

添加依赖修改配置文件

添加消息总线BUS以及rabbitmq 相关依赖

<!-- 消息总线 实现刷新配置中心通知所有微服务应用 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-bus</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-stream-binder-rabbit</artifactId></dependency>

修改配置文件,删除开启动态刷新的请求路径端点部分。

#开启动态刷新的请求路径端点management:endpoints:web:exposure:include: refresh

重启Eureka、config_server、product_service 工程,我们修改配置文件中name值,访问之前链接http://127.0.0.1:8002/payment/get/name。然后使用postman 给config_server服务端发送请求更新配置地址127.0.0.1:9999/actuator/bus-refresh。稍等几秒后我们访问之前链接http://127.0.0.1:8002/payment/get/name。可以看到提交的配置记录已经生效。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。