注:此文不适合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

Spring Cloud构建微服务架构(三)消息总线的更多相关文章

  1. Spring Cloud构建微服务架构

    Dalston版本 由于Brixton和Camden版本的教程已经停止更新,所以笔者计划在2017年上半年完成Dalston版本的教程编写(原计划完成Camden版本教程,但由于写了两篇Dalston ...

  2. 《Spring Cloud构建微服务架构》系列博文示例

    SpringCloud-Learning   源码下载地址:http://download.csdn.net/detail/k21325/9650968     本项目内容为Spring Cloud教 ...

  3. Spring Cloud构建微服务架构(二)服务消费者

    Netflix Ribbon is an Inter Process Communication (IPC) cloud library. Ribbon primarily provides clie ...

  4. Spring Cloud构建微服务架构:服务网关(路由配置)【Dalston版】

    转载:http://blog.didispace.com/spring-cloud-starter-dalston-6-2/ 原创  2017-08-26  翟永超  Spring Cloud 被围观 ...

  5. Cola Cloud 基于 Spring Boot, Spring Cloud 构建微服务架构企业级开发平台

    Cola Cloud 基于 Spring Boot, Spring Cloud 构建微服务架构企业级开发平台: https://gitee.com/leecho/cola-cloud

  6. Spring Cloud构建微服务架构(五)服务网关

    通过之前几篇Spring Cloud中几个核心组件的介绍,我们已经可以构建一个简略的(不够完善)微服务架构了.比如下图所示: 我们使用Spring Cloud Netflix中的Eureka实现了服务 ...

  7. Spring Cloud构建微服务架构 - 服务网关

    通过之前几篇Spring Cloud中几个核心组件的介绍,我们已经可以构建一个简略的(不够完善)微服务架构了.比如下图所示: alt 我们使用Spring Cloud Netflix中的Eureka实 ...

  8. 第1章 Spring Cloud 构建微服务架构(一)服务注册与发现

      一.Spring Cloud 简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理.服务发现.断路器.智能路由.微代理.控制总 ...

  9. Spring Cloud构建微服务架构(一)服务注册与发现

    Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全局锁 ...

随机推荐

  1. python进阶02 特殊方法与特殊属性

    python进阶02 特殊方法与特殊属性 一.初始化.析构 1.初始化 # python中有很多双下划线开头且以下划线结尾的固定方法,它们会在特定的时机被触发执行,这便是特殊方法 # 在实例化的时候就 ...

  2. Hadoop实战项目:小文件合并

    项目背景 在实际项目中,输入数据往往是由许多小文件组成,这里的小文件是指小于HDFS系统Block大小的文件(默认128M),早期的版本所定义的小文件是64M,这里的hadoop-2.2.0所定义的小 ...

  3. final关键字,类的自动加载,命名空间

    final关键字 1.final可以修饰方法和类,但是不能修饰属性: 2.Final修饰的类不能被继承: 3.Fina修饰的方法不能被重写,子类可以对已被final修饰的父类进行访问,但是不能对父类的 ...

  4. Redis的数据类型(lists、Sets)

    lists类型 Redis 列表是简单的字符串列表,按照插入顺序排序.你可以添加一个元素到列表的头部(左边)或者尾部(右边) LPUSH 命令插入一个新的元素到头部, 而 RPUSH 插入一个新元素导 ...

  5. (wp8.1)样式资源

    在开发wp的时候,难免要设置好多属性.但是有好多属性是重复的,我们可不可统一 设置样式呢,答案是肯定的 代码如下 <Page x:Class="Blue.MainPage" ...

  6. Android 网络提交数据(使用Asynchronous Http Client)

    项目主页及简单使用方法http://loopj.com/android-async-http/ 页面布局就不复制了,把主要的Activity记录下来,供自己以后使用: package com.exam ...

  7. SpringBoot 2.x (13):整合ActiveMQ

    ActiveMQ5.x不多做介绍了,主要是SpringBoot的整合 特点: 1)支持来自Java,C,C ++,C#,Ruby,Perl,Python,PHP的各种跨语言客户端和协议 2)支持许多高 ...

  8. tcp的三次连接握手和四次释放握手

    http://blog.csdn.net/whuslei/article/details/6667471/ 这篇博客讲的很清楚. 下面我简单说明一下:三次连接握手,首先client发送请求报文,然后服 ...

  9. 关于React的require添加动态变化的路径

    关于React的require添加动态变化的路径 直接这样写显然是不会有错误的 let path = require('../images/girl.png'); 但是如果你尝试着 var gg = ...

  10. Android方法数methods超过65536

    当Android App中的方法数超过65535时,如果往下兼容到低版本设备时,就会报编译错误: Cannot fit requested classes in a single dex file. ...