三,SpringCloud教程-分布式配置中心Spring cloud Config和消息总线Spring cloud bus集成

在分布式系统中,我们每个服务都有自己的配置内容,这些内容里面有很多共用的配置,比如数据库连接,注册中心的配置等,这个时候就需要一个统一的文件中心服务来就行把这些配置集中管理,Spring cloud Config可以帮我们完成这个功能,但是如果仅仅只有的话还是不能满足我们的需求,假如我们配置发生了改变,这个时候其他的服务就需要重新读取新的配置内容,如果频繁重启服务就会造成服务中断,影响一些核心业务,导致一系列的严重后果,这个时候如果有一个可以在配置文件变更后可以通知各种服务重新读取配置内容的应用这些问题就会迎刃而解,那么他就是Spring cloud  bus消息总线,Spring cloud  bus简单的说就是把消息放入消息RabbitMq,Kafka中间件中入中,整合java的事件处理机制和消息中间件的发送和接收。

继续使用上一篇教程的代码工程,在其下面再创建一个model工程config-server作为配置文件中心

pom文件中引入

        
			org.springframework.boot
			spring-boot-starter-web
		
		
			org.springframework.cloud
			spring-cloud-config-server
		
		
			org.springframework.cloud
			spring-cloud-starter-netflix-eureka-client
		
		
			org.springframework.cloud
			spring-cloud-starter-bus-amqp
		

配置文件如下:

spring.application.name=config-server
server.port=8885

#git地址
spring.cloud.config.server.git.uri=https://github.com/HSUD/Spring-Colude.git
#文件路径
spring.cloud.config.server.git.searchPaths=Config
#分支
spring.cloud.config.label=master
#github用户名称
spring.cloud.config.server.git.username=
#github用户密码
spring.cloud.config.server.git.password=
#注册中心地址
eureka.client.serviceUrl.defaultZone=http://dush:8881/eureka/
#rq配置
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
#消息总线
spring.cloud.bus.enabled=true
spring.cloud.bus.trace.enabled=true
management.endpoints.web.exposure.include=*

在启动类上添加@RefreshScope注解

Spring cloud Config通过git来就行管理配置文件,只需要在配置中就行配置就可以实现,在git仓库这里我放了三个配置文件就行演示

三,SpringCloud教程-分布式配置中心Spring cloud Config和消息总线Spring cloud bus集成_第1张图片

在启动类上添加:@EnableConfigServer开启configServer,@EnableDiscoveryClient提供注册发现,@EnableEurekaClient三个注解

依次启动server-eureka,config-server,访问http://dush:8881/,可以看到configServer已经注册成功

三,SpringCloud教程-分布式配置中心Spring cloud Config和消息总线Spring cloud bus集成_第2张图片

访问http://localhost:8885/application-test.yml可以看到配置内容

三,SpringCloud教程-分布式配置中心Spring cloud Config和消息总线Spring cloud bus集成_第3张图片

 

接下来打开我们的service-consumer服务,就行改造集成

pom文件中添加configServer和bus的依赖

        
            org.springframework.cloud
            spring-cloud-starter-config
        
        
            org.springframework.cloud
            spring-cloud-starter-bus-amqp
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        
        
            org.springframework.cloud
            spring-cloud-stream-binder-rabbit
        

配置文件如下:

spring.application.name=service-consumer
server.port=8883
eureka.client.serviceUrl.defaultZone=http://dush:8881/eureka/

spring.cloud.config.label=master
spring.cloud.config.profile=test
spring.cloud.config.name=application-test
spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.serviceId=config-server

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.cloud.bus.enabled=true
spring.cloud.bus.trace.enabled=true
management.endpoints.web.exposure.include=*

在启动类上添加@RefreshScope注解

在controller添加一个hello接口读取远程配置的hello的值

package com.demo.controller;

import com.demo.service.ConsumerFeignService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/producer/")
public class ConsumerController {

    @Autowired
    private ConsumerFeignService consumerFeignService;

    @Value("${server.port}")
    String port;

    @Value("${spring.application.name}")
    String applicationName;

    @Value("${hello}")
    String hello;

    @GetMapping("hello")
    public String hello() {
        return hello;
    }

    @GetMapping("getHello")
    public String getHello() {
        return applicationName +" "+ port + "  rpc==== >" +consumerFeignService.gethello();
    }


}

启动service-consumer服务,访问http://localhost:8883/producer/hello

这个时候一个config的服务流程已经搭建完成,下面验证一下bus:

 

这个时候我们在github直接修改application-test.yml文件(偷个懒)的hello值为word881122

 

这个时候我们在访问http://localhost:8883/producer/hello

 

这个时候值还是没有变的,但是我们执行http://localhost:8885/actuator/bus-refresh,此命令是post请求,可以使用curl执行

curl -X POST http://localhost:8885/actuator/bus-refresh

三,SpringCloud教程-分布式配置中心Spring cloud Config和消息总线Spring cloud bus集成_第4张图片

在访问http://localhost:8883/producer/hello

可以看到hello的值已经被修改

当然在实际使用中会比这个更复杂,我们可以吧配置注册中心地址中心,数据库连接,rq连接这些维护到config服务中去

你可能感兴趣的:(Spring,cloud,Java,教程)