Spring Cloud Config 和Spring Cloud Bus实现配置中心

Spring Cloud是很多组件的集合,Spring将常用的技术框架进行包装和整合,如mybatis zookeeper rabbitmq redis等等,还有一些科技公司贡献出来的一些经过生产环境验证的组件如奈飞公司贡献出的eureke(服务发现) Hystrix(监控与隔离)  Feign(声明式服务调用)  Ribbon(负载均衡) Zuul(网关) 等等,详情移步官网 SpringCloud

Spring Cloud是目前比较流行的微服务开发框架,可以与容器技术如docker一起使用,提高生产力。但是组件过多也有一定的学习曲线,而且适合大公司的架构不见得适合我们的业务,要根据实际情况灵活运用。

Spring Cloud Config是基于git/svn仓库来管理配置,然后有一个ConfigServer来负责拉取配置,ConfigClient是使用配置的应用,比如现在有很多微服务应用,如订单管理,用户管理,地址管理,库存管理等等,在这些微服务的pom中增加ConfigClient就可以自动从ConfigServer拉取配置。我们还希望配置更新之后可以实时获取,这时候需要用到spring cloud中的bus组件,bus其实就是基于amqp的一个消息总线,spring对rabbitmq和kafka支持的比较好。常见的场景是:

1、更改配置

2、push到远程仓库

3、push动作触发一个web hook

4、这个web hook会使用post访问ConfigServer的一个接口

5、ConfigServer通过rabbitmq发送一个广播

6、client收到消息,自动拉取并刷新配置

这些不需要任何编码工作,只需要配置就可以。下面是一个简单的例子。

1、rabbitmq安装参照官网,十分简单,也可以参考 俺的博客

2、启动一个Config Server

pom.xml



    4.0.0

    spring_cloud
    config_demo
    1.0-SNAPSHOT

    
        UTF-8
    

    
        org.springframework.boot
        spring-boot-starter-parent
        2.0.5.RELEASE
    

    
        
            
                org.springframework.cloud
                spring-cloud-config
                2.0.1.RELEASE
                pom
                import
            
        
    

    
        
            org.springframework.cloud
            spring-cloud-config-server
        

        
            org.springframework.cloud
            spring-cloud-starter-bus-amqp
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        
        
            org.springframework.cloud
            spring-cloud-bus
            2.0.0.RELEASE
        
        
            org.springframework.cloud
            spring-cloud-starter-stream-rabbit
            2.0.1.RELEASE
        
    

    
        
            spring-snapshots
            Spring Snapshots
            https://repo.spring.io/libs-snapshot
            
                true
            
        
    

入口类:

@EnableConfigServer

@SpringBootApplication

public class Application {

    public static void main(String[] args) {

        SpringApplication.run(Application.class, args);

    }

}

配置:application.properties

server.port=8888
#配置仓库地址
spring.cloud.config.server.git.uri=https://github.com/mychemicalromance/spring_cloud_config
## 配置文件夹
spring.cloud.config.server.git.searchPaths=configs
## 分支
spring.cloud.config.label=master
## 以下是bus相关配置 替换成自己的就行,比如host port name password
spring.cloud.bus.trace.enabled=true
spring.rabbitmq.host=192.168.137.5
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=rabbit
management.endpoints.web.exposure.include=*

解释:Spring Cloud只需要上述入口类就启动了一个web工程,使用的是嵌入的tomcat/jetty。默认读取application.[properties|yml|json] 使用喜欢的格式就行。

3、Config Client

pom.xml



    4.0.0

    spring_cloud
    config_client
    1.0-SNAPSHOT

    
        UTF-8
    

    
        org.springframework.boot
        spring-boot-starter-parent
        2.0.5.RELEASE
    

    
        
            
                org.springframework.cloud
                spring-cloud-config
                2.0.1.RELEASE
                pom
                import
            
        
    

    
        
            org.springframework.cloud
            spring-cloud-starter-config
        
        
            org.springframework.cloud
            spring-cloud-starter-bus-amqp
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        
        
            org.springframework.cloud
            spring-cloud-bus
            2.0.0.RELEASE
        
        
            org.springframework.cloud
            spring-cloud-starter-stream-rabbit
            2.0.1.RELEASE
        
    
    
        
            spring-snapshots
            Spring Snapshots
            https://repo.spring.io/libs-snapshot
            
                true
            
        
    

入口类:

@Configuration
@EnableAutoConfiguration
@RestController
@RefreshScope
public class Application {

    @Value("${a}")
    String name;

    @RequestMapping("/")
    public String home() {
        return "Hello " + name;
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

配置:application.properties

server.port=8002
## bus相关配置,替换成自己的就行,比如host port name password
spring.cloud.bus.trace.enabled=true
spring.rabbitmq.host=192.168.137.5
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=rabbit
## 读取app1的配置
spring.application.name=app1
## profile是dev,可以有测试test,沙箱mirror,线上online等等
spring.cloud.config.profile=dev
management.endpoints.web.exposure.include=*


3、启动Config Server和Config Client,首先访问localhost:8888/app1/dev,可以看到所有配置,然后访问localhost:8002/可以看到获取了配置。然后本地更改配置文件并push。由于在github上配置web hook来调用本地是不现实的,所以我们用curl来模拟post访问Config Server,如果是在公司的git上,并且在公司局域网内可以访问Config Server,可以配置web hook来测试。

curl -X POST "http://localhost:8888/actuator/bus-refresh"

然后刷新Config Client,就能看到最新的配置了。

你可能感兴趣的:(java,开发语言)