zoukankan      html  css  js  c++  java
  • Spring Cloud构建微服务架构(三)消息总线

     注:此文不适合0基础学习者直接阅读,请先完整的将作者关于微服务的博文全部阅读一遍,如果还有疑问,可以再来阅读此文,地址:http://blog.csdn.net/sosfnima/article/details/53178157,推荐读者去找作者的书籍《Spring Cloud微服务实战》进行详细的学习

    序:

            接着上一篇博文《Spring Cloud构建微服务架构(二)分布式配置中心》往下说,上一篇博文中,我们分析了分布式配置中心如何去git仓中读取配置信息,以及客户端如何去获取配置信息。但是,之前的分析都是需要人工手动维护的,假如我们有100个集群服务,难道我们要通过手动去分别维护这些信息吗?这样维护的成本太太了,此篇文章则是对上一篇博文的延续,希望通过一次维护,整个集群中所有服务进行动态更新,大大简化维护成本。其实,这就是我经常说的热部署,即不需要重启服务器就可以更新系统配置。

     

           消息中线我借助了服务注册与发现进行简化配置,具体不清楚的可以参照《Spring Cloud构建微服务架构(一)服务注册与发现》一文。

    消息中间件rabbitMQ:

          目前,spring  cloud  bus消息总线集成了两种中间件,分别是rabbitMQ以及Kafka。而我们项目组用的是rabbitMQ,因此我这一篇的消息总线主要是基于rabbitMQ展开叙述的,至于rabbitMQ的安装和说明,请参照《Spring Boot中使用RabbitMQ》 一文。

     

    按照上一篇博文配置,其实现原理结构图如下:

    而按此篇博文进行配置,其实现结构如如下:

     对比两张图,好处一目了然。

    修改配置中心服务器:

          我们公司已经安装好了一套完整的rabbitMQ环境,因此我就基于此服务进行说明:

         上一篇文章中,我们说到了两个服务,一个是分布式配置中心服务器(config-server),还有一个是分布式配置中心客户端(zuul_serviceA、zuul_serviceC),这里两个客户端代码,除了端口不一样,其他内容一模一样,你们可以将按照上一篇构建的客户端程序复制一份,改下服务名以及端口号即可。

      首先将config-server配置文件application.properties修改成如下:

    #这些是之前的配置
    spring.application.name=configServer server.port=7001 eureka.client.serviceUrl.defaultZone=http://localhost:8081/eureka/ spring.cloud.config.server.git.uri=http://10.10.10.236/spring/cloud-config.git spring.cloud.config.server.git.searchPaths=cloud-config-repo
    #由此往下是后添加的RabbitMQ配置信息 management.security.enabled=false spring.rabbitmq.host=10.10.10.201 spring.rabbitmq.port=5672 spring.rabbitmq.username=guest spring.rabbitmq.password=guest

    添加依赖包: 

    <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka</artifactId>
            </dependency>
    
            <!-- 配置中心依赖包 -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-config-server</artifactId>
            </dependency>
    
            <!-- 消息总线依赖包 -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-bus-amqp</artifactId>
            </dependency>
            
            <!-- 消息总线依赖包 -->
             <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency> 

    主程序:

    package com.net;
    
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.builder.SpringApplicationBuilder;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    import org.springframework.cloud.config.server.EnableConfigServer;
    
    @EnableDiscoveryClient
    @EnableConfigServer
    @SpringBootApplication
    public class App 
    {
        public static void main( String[] args )
        {
            new SpringApplicationBuilder(App.class).web(true).run(args);
        }
    }

     将配置中心注册到eureka中,这样后面的客户端服务zuul_serviceA、zuul_serviceC等等,就可以简化配置了,具体的信息在后面说;

     至此,我们就可以说已经将消息总线与配置中心进行了整合,此时放在后面说。

    修改配置中心客户端

        以zuul_serviceA为例,其他服务具体操作和本服务一致。

        添加依赖包:

    <!-- eureka服务注册 -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
    
            <dependency>
                <groupId>c3p0</groupId>
                <artifactId>c3p0</artifactId>
                <version>0.9.1.2</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-config</artifactId>
            </dependency>
    
            <!-- 消息总线rabbitMQ -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-bus-amqp</artifactId>
            </dependency>
            <!-- 消息总线必须模块,用来刷新端点 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
    
              <dependency>
                <groupId>org.springframework.retry</groupId>
                <artifactId>spring-retry</artifactId>
            </dependency>
             
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-aop</artifactId>
            </dependency> 

    修改配置文件bootstrap.properties:

    spring.application.name=ServiceA
    server.port=2001
    
    #spring.cloud.config.hostname=127.0.0.1
    #spring.cloud.config.uri=http://${spring.cloud.config.hostname}:${config.port:7001}
    #spring.cloud.config.name=lz-hr
    #spring.cloud.config.profile=aaa,bbb
     
    
    #add bus later
    eureka.client.serviceUrl.defaultZone=http://localhost:8081/eureka/
    spring.cloud.config.discovery.enabled=true
    spring.cloud.config.discovery.serviceId=configServer
    spring.cloud.config.name=lz-hr
    spring.cloud.config.profile=bbb,aaa
    spring.cloud.config.failFast=true

    #spring cloud bus
    management.security.enabled=false
    spring.rabbitmq.host=10.10.10.201
    spring.rabbitmq.port=5672
    spring.rabbitmq.username=guest
    spring.rabbitmq.password=guest

    至此,rabbitMQ在配置中心服务端与客户端全部配置完毕。

    下面一次启动eurake服务、config-server服务,zuul_serviceA服务以及zuul_serviceC,查看配置注册中心信息:

    下面分别查看zuul_serviceA服务以及zuul_serviceC服务对应的界面信息:

     

    下面对git仓中的lz-hr-bbb.properties文件中的bbb属性进行修改:

    按照 上一篇博文《Spring Cloud构建微服务架构(二)分布式配置中心》配置,要分别取刷新zuul_serverA和zuul_serverC,假如有100个服务,那就要去刷100次,维护成本巨大。

    而按照此篇博文配置,只需要刷新其中一个客户端服务即可,其他的服务自动进行刷新,大大降低了维护成本。

    下面刷新zuul_serverA服务,然后分别查看zuul_serverA服务于zuul_serverC服务,结果查看的信息都是最新的:

    注:刷新URL工具为 fiddler

  • 相关阅读:
    Mac版sublime text右键open in browser 不能识别中文名解决办法
    python 内置函数
    python 迭代器 生成器 列表推导式和生成器表达式
    python 闭包
    python 练习题
    python 打印扑克牌练习题
    python 函数 可变数据类型默认值
    python min() ,max()
    python 九九乘法表
    函数的进阶
  • 原文地址:https://www.cnblogs.com/chen1-kerr/p/7251553.html
Copyright © 2011-2022 走看看