Spring Cloud构建微服务架构之九 消息总线

时间:2021-6-2 作者:qvyue

本文参考了:
http://blog.didispace.com/springcloud7/
http://blog.didispace.com/springcloud8/

问题:如何实现对配置信息的实时更新?
虽然,我们已经能够通过/refresh接口和Git仓库的Web Hook来实现Git仓库中的内容修改触发应用程序的属性更新。但是,如果所有触发操作均需要我们手工去维护Web Hook中的应用位置的话,随着系统的不断扩张,会变的越来越难以维护,而消息代理中间件是解决该问题最为合适的方案。
消息代理有这样一个功能:消息代理中间件可以将消息路由到一个或多个目的地。利用这个功能,我们就能完美的解决该问题,下面我们来说说Spring Cloud Bus中的具体实现方案。

消息总线和RabbitMQ结合实现

RabbitMQ的基础知识和使用方法
1、简介
MQ(Message Queue)消息队列,用于应用系统解耦、消息异步分发。 RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统。
其优点如下:
1)Reliability-可靠性高。
2)Flexible Routing-路由灵活。
3)Clustering-支持集群。
4)Federation-支持互联。
5)Tracing-便于追踪。
RabbitMQ的安装与使用实践。
实践环境:Window7 x64系统。
2、安装
安装Erland,通过官方下载页面http://www.erlang.org/downloads
获取exe安装包,直接打开并完成安装。
安装RabbitMQ,通过官方下载页面https://www.rabbitmq.com/download.html
获取exe安装包。
下载完成后,直接运行安装程序。
RabbitMQ Server安装完成之后,会自动的注册为服务,并以默认配置启动起来。

Spring Cloud构建微服务架构之九 消息总线

3、RabbitMQ启动
Rabbit管理

我们可以直接通过配置文件的访问进行管理,也可以通过Web的访问进行管理。下面我们将介绍如何通过Web进行管理。

执行rabbitmq-plugins enable rabbitmq_management命令,开启Web管理插件,这样我们就可以通过浏览器来进行管理了。

#rabbitmq-plugins enable rabbitmq_management
The following plugins have been enabled:
  mochiweb
  webmachine
  rabbitmq_web_dispatch
  amqp_client
  rabbitmq_management_agent
  rabbitmq_management
Applying plugin configuration to rabbit@SHPWSUN3... started 6 plugins.

打开浏览器并访问:http://localhost:15672/
并使用默认用户guest登录,密码也为guest。我们可以看到如下图的管理页面:

Spring Cloud构建微服务架构之九 消息总线

下面我们开始具体介绍Spring Cloud Bus的配置,并以一个Spring Cloud Bus与Spring Cloud Config结合的例子来实现配置内容的实时更新。

准备工作:需要用到已经实现的关于Spring Cloud Config的几个工程:
config-repo:定义在Git仓库中的一个目录,其中存储了应用名为configsample的多环境配置文件,配置文件中有一个from参数。
config-server-eureka:配置了Git仓库,并注册到了Eureka的服务端。
config-client-eureka:通过Eureka发现Config Server的客户端,应用名为configsample,用来访问配置服务器以获取配置信息。该应用中提供了一个/from接口,它会获取config-repo/configsample-dev.properties中的from属性返回。

扩展config-client-eureka应用
修改pom.xml增加spring-cloud-starter-bus-amqp模块。

org.springframework.cloud
spring-cloud-starter-bus-amqp

最终的POM文件如下:

UTF-8UTF-81.8Dalston.SR1org.springframework.retryspring-retryorg.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-aoporg.springframework.bootspring-boot-starter-actuatororg.springframework.cloudspring-cloud-starter-configorg.springframework.cloudspring-cloud-starter-eurekaorg.springframework.cloudspring-cloud-starter-bus-amqporg.springframework.bootspring-boot-starter-testtest

在配置文件中增加关于RabbitMQ的连接和用户信息
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=springcloud
spring.rabbitmq.password=123456
最终配置如下:

spring.application.name=configsample

#spring.cloud.config.uri=http://localhost:7001/

server.port=7002
# 
eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/
#

spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.serviceId=config-server
spring.cloud.config.profile=dev

management.security.enabled=false
spring.cloud.config.failFast=true

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=springcloud
spring.rabbitmq.password=123456

启动config-server-eureka,再启动两个config-client-eureka(使用不同的端口7002、7003),我们可以在config-client-eureka中的控制台中看到如下内容,在启动时候,客户端程序多了一个/bus/refresh请求。

o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/bus/refresh],methods=[POST]}" onto public void org.springframework.cloud.bus.endpoint.RefreshBusEndpoint.refresh(java.lang.String)

先访问两个config-client-eureka的/from请求,会返回当前config-repo/didispace-dev.properties中的from属性。
接着,我们修改config-repo/configsample-dev.properties中的from属性值,并发送POST请求到其中的一个/bus/refresh。
最后,我们再分别访问启动的两个config-client-eureka的/from请求,此时这两个请求都会返回最新的config-repo/configsample-dev.properties中的from属性。

到这里,我们已经能够通过Spring Cloud Bus来实时更新总线上的属性配置了。

架构优化

既然Spring Cloud Bus的/bus/refresh接口提供了针对服务和实例进行配置更新的参数,那么我们的架构也可以做出一些调整。在之前的架构中,服务的配置更新需要通过向具体服务中的某个实例发送请求,再触发对整个服务集群的配置更新。虽然能实现功能,但是这样的结果是,我们指定的应用实例就会不同于集群中的其他应用实例,这样会增加集群内部的复杂度,不利于将来的运维工作,比如:我们需要对服务实例进行迁移,那么我们不得不修改Web Hook中的配置等。所以我们要尽可能的让服务集群中的各个节点是对等的。
因此,我们将之前的架构做了一些调整,如下图所示:

Spring Cloud构建微服务架构之九 消息总线

在Config Server中也引入Spring Cloud Bus,将配置服务端也加入到消息总线中来。

spring.application.name=config-server
server.port=7001
# u914Du7F6Eu670Du52A1u6CE8u518Cu4E2Du5FC3
eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/
# gitu4ED3u5E93u914Du7F6E
spring.cloud.config.server.git.uri=https://git.coding.net/weimin/cloud.git/
spring.cloud.config.server.git.searchPaths=config-center/config-repo
spring.cloud.config.server.git.username=weimin
spring.cloud.config.server.git.password=730309

management.security.enabled=false
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=springcloud
spring.rabbitmq.password=123456

/bus/refresh请求不在发送到具体服务实例上,而是发送给Config Server,并可通过destination参数来指定需要更新配置的服务或实例。

通过上面的改动,我们的服务实例就不需要再承担触发配置更新的职责。同时,对于Git的触发等配置都只需要针对Config Server即可,从而简化了集群上的一些维护工作。

消息总线和Kafka结合实现

简介
Kafka是一个由LinkedIn开发的分布式消息系统,它于2011年初开源,现在由著名的Apache基金会维护与开发。Kafka使用Scala实现,被用作LinkedIn的活动流和运营数据处理的管道,现在也被诸多互联网企业广泛地用作为数据流管道和消息系统。

首先,我们需要从官网上下载安装介质。下载地址为:http://kafka.apache.org/downloads.html。本例中采用的版本为:Kafka-0.10.2.1

Spring Cloud构建微服务架构之九 消息总线
图片.png

由于Kafka的设计中依赖了ZooKeeper,所以我们可以在bin和config目录中除了看到Kafka相关的内容之外,还有ZooKeeper相关的内容。其中bin目录存放了Kafka和ZooKeeper的命令行工具,bin根目录下是适用于Linux/Unix的shell,而bin/windows下的则是适用于windows下的bat。我们可以根据实际的系统来设置环境变量,以方便后续的使用和操作。而在config目录中,则是用来存放了关于Kafka与ZooKeeper的配置信息。

然后:启动ZooKeeper,执行命令:zookeeper-server-start config/zookeeper.properties,该命令需要指定zookeeper的配置文件位置才能正确启动,kafka的压缩包中包含了其默认配置,开发与测试环境不需要修改。

Spring Cloud构建微服务架构之九 消息总线
图片.png
Spring Cloud构建微服务架构之九 消息总线
图片.png

最后:启动Kafka,执行命令:kafka-server-start config/server.properties,该命令也需要指定Kafka配置文件的正确位置,如上命令中指向了解压目录包含的默认配置。若在测试时,使用外部集中环境的ZooKeeper的话,我们可以在该配置文件中通过zookeeper.connect参数来设置ZooKeeper的地址和端口,它默认会连接本地2181端口的ZooKeeper;如果需要设置多个ZooKeeper节点,可以为这个参数配置多个ZooKeeper地址,并用逗号分割。比如:zookeeper.connect=127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002。

Spring Cloud构建微服务架构之九 消息总线
图片.png

创建Topic,执行命令:kafka-topics –create –zookeeper localhost:2181 –replication-factor 1 –partitions 1 –topic test,通过该命令,创建一个名为“test”的Topic,该Topic包含一个分区一个Replica。在创建完成后,可以使用kafka-topics –list –zookeeper localhost:2181命令来查看当前的Topic。

Kafka整合Spring Cloud Bus

上面使用Rabbit实现消息总线的案例中,我们已经通过引入spring-cloud-starter-bus-amqp模块,完成了使用RabbitMQ来实现的消息总线。若我们要使用Kafka来实现消息总线时,只需要把spring-cloud-starter-bus-amqp替换成spring-cloud-starter-bus-kafka模块,在pom.xml的dependenies节点中进行修改,具体如下:

org.springframework.cloudspring-cloud-starter-bus-kafka

如果我们在启动Kafka时均采用了默认配置,那么我们不需要再做任何其他配置就能在本地实现从RabbitMQ到Kafka的切换。

在config-server启动时,我们可以在控制台中看到如下输出:

2017-06-01 14:28:31,739  INFO main c.p.c.Application:57 - Started Application in 0.9 seconds (JVM running for 17.254)
2017-06-01 14:28:31,833  INFO main o.s.c.s.b.k.p.KafkaTopicProvisioner:106 - Using kafka topic for outbound: springCloudBus
2017-06-01 14:28:32,044  INFO main o.a.z.ZooKeeper:100 - Client environment:zookeeper.version=3.4.8--1, built on 02/06/2016 03:18 GMT
2017-06-01 14:28:32,044  INFO main o.a.z.ZooKeeper:100 - Client environment:host.name=peer1
2017-06-01 14:28:32,045  INFO main o.a.z.ZooKeeper:100 - Client environment:java.version=1.8.0_111
2017-06-01 14:28:32,045  INFO main o.a.z.ZooKeeper:100 - Client environment:java.vendor=Oracle Corporation
2017-06-01 14:28:32,045  INFO main o.a.z.ZooKeeper:100 - Client environment:java.home=C:ProgramsJavajdk1.8.0_111jre
2017-06-01 14:28:32,045  INFO main o.a.z.ZooKeeper:100 - Client environment:java.class.path=D:Workspacecloudspring-busconfig-server-eureka-kafkatargetclasses;C:Userswsun3.m2repositoryorgspringframeworkcloudspring-cloud-config-server1.3.0.RELEASEspring-cloud-config-server-1.3.0.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkcloudspring-cloud-config-client1.3.0.RELEASEspring-cloud-config-client-1.3.0.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkbootspring-boot-autoconfigure1.5.3.RELEASEspring-boot-autoconfigure-1.5.3.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkcloudspring-cloud-commons1.2.0.RELEASEspring-cloud-commons-1.2.0.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkcloudspring-cloud-context1.2.0.RELEASEspring-cloud-context-1.2.0.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkspring-web4.3.8.RELEASEspring-web-4.3.8.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkspring-aop4.3.8.RELEASEspring-aop-4.3.8.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkspring-beans4.3.8.RELEASEspring-beans-4.3.8.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkspring-context4.3.8.RELEASEspring-context-4.3.8.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkspring-core4.3.8.RELEASEspring-core-4.3.8.RELEASE.jar;C:Userswsun3.m2repositorycomfasterxmljacksoncorejackson-annotations2.8.0jackson-annotations-2.8.0.jar;C:Userswsun3.m2repositorycomfasterxmljacksoncorejackson-databind2.8.8jackson-databind-2.8.8.jar;C:Userswsun3.m2repositoryorgspringframeworkbootspring-boot-starter-actuator1.5.3.RELEASEspring-boot-starter-actuator-1.5.3.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkbootspring-boot-starter1.5.3.RELEASEspring-boot-starter-1.5.3.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkbootspring-boot-starter-logging1.5.3.RELEASEspring-boot-starter-logging-1.5.3.RELEASE.jar;C:Userswsun3.m2repositorychqoslogbacklogback-classic1.1.11logback-classic-1.1.11.jar;C:Userswsun3.m2repositorychqoslogbacklogback-core1.1.11logback-core-1.1.11.jar;C:Userswsun3.m2repositoryorgslf4jjcl-over-slf4j1.7.25jcl-over-slf4j-1.7.25.jar;C:Userswsun3.m2repositoryorgslf4jjul-to-slf4j1.7.25jul-to-slf4j-1.7.25.jar;C:Userswsun3.m2repositoryorgslf4jlog4j-over-slf4j1.7.25log4j-over-slf4j-1.7.25.jar;C:Userswsun3.m2repositoryorgspringframeworkbootspring-boot-actuator1.5.3.RELEASEspring-boot-actuator-1.5.3.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkbootspring-boot-starter-web1.5.3.RELEASEspring-boot-starter-web-1.5.3.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkbootspring-boot-starter-tomcat1.5.3.RELEASEspring-boot-starter-tomcat-1.5.3.RELEASE.jar;C:Userswsun3.m2repositoryorgapachetomcatembedtomcat-embed-core8.5.14tomcat-embed-core-8.5.14.jar;C:Userswsun3.m2repositoryorgapachetomcatembedtomcat-embed-el8.5.14tomcat-embed-el-8.5.14.jar;C:Userswsun3.m2repositoryorgapachetomcatembedtomcat-embed-websocket8.5.14tomcat-embed-websocket-8.5.14.jar;C:Userswsun3.m2repositoryorghibernatehibernate-validator5.3.5.Finalhibernate-validator-5.3.5.Final.jar;C:Userswsun3.m2repositoryjavaxvalidationvalidation-api1.1.0.Finalvalidation-api-1.1.0.Final.jar;C:Userswsun3.m2repositoryorgjbossloggingjboss-logging3.3.1.Finaljboss-logging-3.3.1.Final.jar;C:Userswsun3.m2repositorycomfasterxmlclassmate1.3.3classmate-1.3.3.jar;C:Userswsun3.m2repositoryorgspringframeworkspring-webmvc4.3.8.RELEASEspring-webmvc-4.3.8.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkspring-expression4.3.8.RELEASEspring-expression-4.3.8.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworksecurityspring-security-crypto4.2.2.RELEASEspring-security-crypto-4.2.2.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworksecurityspring-security-rsa1.0.3.RELEASEspring-security-rsa-1.0.3.RELEASE.jar;C:Userswsun3.m2repositoryorgbouncycastlebcpkix-jdk15on1.55bcpkix-jdk15on-1.55.jar;C:Userswsun3.m2repositoryorgbouncycastlebcprov-jdk15on1.55bcprov-jdk15on-1.55.jar;C:Userswsun3.m2repositoryorgeclipsejgitorg.eclipse.jgit4.6.0.201612231935-rorg.eclipse.jgit-4.6.0.201612231935-r.jar;C:Userswsun3.m2repositorycomjcraftjsch.1.53jsch-0.1.53.jar;C:Userswsun3.m2repositorycomgooglecodejavaewahJavaEWAH1.1.6JavaEWAH-1.1.6.jar;C:Userswsun3.m2repositoryorgapachehttpcomponentshttpclient4.5.3httpclient-4.5.3.jar;C:Userswsun3.m2repositoryorgapachehttpcomponentshttpcore4.4.6httpcore-4.4.6.jar;C:Userswsun3.m2repositorycommons-codeccommons-codec1.10commons-codec-1.10.jar;C:Userswsun3.m2repositoryorgslf4jslf4j-api1.7.25slf4j-api-1.7.25.jar;C:Userswsun3.m2repositoryorgyamlsnakeyaml1.17snakeyaml-1.17.jar;C:Userswsun3.m2repositoryorgspringframeworkcloudspring-cloud-starter-eureka1.3.0.RELEASEspring-cloud-starter-eureka-1.3.0.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkcloudspring-cloud-starter1.2.0.RELEASEspring-cloud-starter-1.2.0.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkcloudspring-cloud-netflix-core1.3.0.RELEASEspring-cloud-netflix-core-1.3.0.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkbootspring-boot1.5.3.RELEASEspring-boot-1.5.3.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkcloudspring-cloud-netflix-eureka-client1.3.0.RELEASEspring-cloud-netflix-eureka-client-1.3.0.RELEASE.jar;C:Userswsun3.m2repositorycomnetflixeurekaeureka-client1.6.2eureka-client-1.6.2.jar;C:Userswsun3.m2repositoryorgcodehausjettisonjettison1.3.7jettison-1.3.7.jar;C:Userswsun3.m2repositorystaxstax-api1.0.1stax-api-1.0.1.jar;C:Userswsun3.m2repositorycomnetflixnetflix-commonsnetflix-eventbus.3.0netflix-eventbus-0.3.0.jar;C:Userswsun3.m2repositorycomnetflixnetflix-commonsnetflix-infix.3.0netflix-infix-0.3.0.jar;C:Userswsun3.m2repositorycommons-jxpathcommons-jxpath1.3commons-jxpath-1.3.jar;C:Userswsun3.m2repositoryjoda-timejoda-time2.9.9joda-time-2.9.9.jar;C:Userswsun3.m2repositoryorgantlrantlr-runtime3.4antlr-runtime-3.4.jar;C:Userswsun3.m2repositoryorgantlrstringtemplate3.2.1stringtemplate-3.2.1.jar;C:Userswsun3.m2repositoryantlrantlr2.7.7antlr-2.7.7.jar;C:Userswsun3.m2repositorycomgooglecodegsongson2.8.0gson-2.8.0.jar;C:Userswsun3.m2repositoryorgapachecommonscommons-math2.2commons-math-2.2.jar;C:Userswsun3.m2repositorycomnetflixarchaiusarchaius-core.7.4archaius-core-0.7.4.jar;C:Userswsun3.m2repositoryjavaxwsrsjsr311-api1.1.1jsr311-api-1.1.1.jar;C:Userswsun3.m2repositorycomnetflixservoservo-core.10.1servo-core-0.10.1.jar;C:Userswsun3.m2repositorycomnetflixservoservo-internal.10.1servo-internal-0.10.1.jar;C:Userswsun3.m2repositorycomsunjerseyjersey-core1.19.1jersey-core-1.19.1.jar;C:Userswsun3.m2repositorycomsunjerseyjersey-client1.19.1jersey-client-1.19.1.jar;C:Userswsun3.m2repositorycomsunjerseycontribsjersey-apache-client41.19.1jersey-apache-client4-1.19.1.jar;C:Userswsun3.m2repositorycomgoogleinjectguice4.1.0guice-4.1.0.jar;C:Userswsun3.m2repositoryjavaxinjectjavax.inject1javax.inject-1.jar;C:Userswsun3.m2repositoryaopallianceaopalliance1.0aopalliance-1.0.jar;C:Userswsun3.m2repositorycomfasterxmljacksoncorejackson-core2.8.8jackson-core-2.8.8.jar;C:Userswsun3.m2repositorycomnetflixeurekaeureka-core1.6.2eureka-core-1.6.2.jar;C:Userswsun3.m2repositoryorgcodehauswoodstoxwoodstox-core-asl4.4.1woodstox-core-asl-4.4.1.jar;C:Userswsun3.m2repositoryjavaxxmlstreamstax-api1.0-2stax-api-1.0-2.jar;C:Userswsun3.m2repositoryorgcodehauswoodstoxstax2-api3.1.4stax2-api-3.1.4.jar;C:Userswsun3.m2repositoryorgspringframeworkcloudspring-cloud-starter-archaius1.3.0.RELEASEspring-cloud-starter-archaius-1.3.0.RELEASE.jar;C:Userswsun3.m2repositorycommons-configurationcommons-configuration1.8commons-configuration-1.8.jar;C:Userswsun3.m2repositorycommons-langcommons-lang2.6commons-lang-2.6.jar;C:Userswsun3.m2repositorycomgoogleguavaguava18.0guava-18.0.jar;C:Userswsun3.m2repositoryorgspringframeworkcloudspring-cloud-starter-ribbon1.3.0.RELEASEspring-cloud-starter-ribbon-1.3.0.RELEASE.jar;C:Userswsun3.m2repositorycomnetflixribbonribbon2.2.2ribbon-2.2.2.jar;C:Userswsun3.m2repositorycomnetflixribbonribbon-transport2.2.2ribbon-transport-2.2.2.jar;C:Userswsun3.m2repositoryioreactivexrxnetty-contexts.4.9rxnetty-contexts-0.4.9.jar;C:Userswsun3.m2repositoryioreactivexrxnetty-servo.4.9rxnetty-servo-0.4.9.jar;C:Userswsun3.m2repositorycomnetflixhystrixhystrix-core1.5.10hystrix-core-1.5.10.jar;C:Userswsun3.m2repositoryorghdrhistogramHdrHistogram2.1.9HdrHistogram-2.1.9.jar;C:Userswsun3.m2repositoryioreactivexrxnetty.4.9rxnetty-0.4.9.jar;C:Userswsun3.m2repositoryionettynetty-codec-http4.0.27.Finalnetty-codec-http-4.0.27.Final.jar;C:Userswsun3.m2repositoryionettynetty-codec4.0.27.Finalnetty-codec-4.0.27.Final.jar;C:Userswsun3.m2repositoryionettynetty-handler4.0.27.Finalnetty-handler-4.0.27.Final.jar;C:Userswsun3.m2repositoryionettynetty-transport-native-epoll4.0.27.Finalnetty-transport-native-epoll-4.0.27.Final.jar;C:Userswsun3.m2repositoryionettynetty-common4.0.27.Finalnetty-common-4.0.27.Final.jar;C:Userswsun3.m2repositoryionettynetty-buffer4.0.27.Finalnetty-buffer-4.0.27.Final.jar;C:Userswsun3.m2repositoryionettynetty-transport4.0.27.Finalnetty-transport-4.0.27.Final.jar;C:Userswsun3.m2repositorycomnetflixribbonribbon-core2.2.2ribbon-core-2.2.2.jar;C:Userswsun3.m2repositorycomnetflixribbonribbon-httpclient2.2.2ribbon-httpclient-2.2.2.jar;C:Userswsun3.m2repositorycommons-collectionscommons-collections3.2.2commons-collections-3.2.2.jar;C:Userswsun3.m2repositorycomnetflixnetflix-commonsnetflix-commons-util.1.1netflix-commons-util-0.1.1.jar;C:Userswsun3.m2repositorycomnetflixribbonribbon-loadbalancer2.2.2ribbon-loadbalancer-2.2.2.jar;C:Userswsun3.m2repositorycomnetflixnetflix-commonsnetflix-statistics.1.1netflix-statistics-0.1.1.jar;C:Userswsun3.m2repositoryioreactivexrxjava1.1.10rxjava-1.1.10.jar;C:Userswsun3.m2repositorycomnetflixribbonribbon-eureka2.2.2ribbon-eureka-2.2.2.jar;C:Userswsun3.m2repositorycomthoughtworksxstreamxstream1.4.9xstream-1.4.9.jar;C:Userswsun3.m2repositoryxmlpullxmlpull1.1.3.1xmlpull-1.1.3.1.jar;C:Userswsun3.m2repositoryxpp3xpp3_min1.1.4cxpp3_min-1.1.4c.jar;C:Userswsun3.m2repositoryorgspringframeworkcloudspring-cloud-starter-bus-kafka1.3.0.RELEASEspring-cloud-starter-bus-kafka-1.3.0.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkcloudspring-cloud-starter-stream-kafka1.2.0.RELEASEspring-cloud-starter-stream-kafka-1.2.0.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkcloudspring-cloud-stream-binder-kafka1.2.0.RELEASEspring-cloud-stream-binder-kafka-1.2.0.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkcloudspring-cloud-stream-binder-kafka-core1.2.0.RELEASEspring-cloud-stream-binder-kafka-core-1.2.0.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkcloudspring-cloud-stream-codec1.2.1.RELEASEspring-cloud-stream-codec-1.2.1.RELEASE.jar;C:Userswsun3.m2repositorycomesotericsoftwarekryo-shaded3.0.3kryo-shaded-3.0.3.jar;C:Userswsun3.m2repositorycomesotericsoftwareminlog1.3.0minlog-1.3.0.jar;C:Userswsun3.m2repositoryorgobjenesisobjenesis2.1objenesis-2.1.jar;C:Userswsun3.m2repositoryorgapachekafkakafka_2.11.10.1.1kafka_2.11-0.10.1.1.jar;C:Userswsun3.m2repositorynetsfjopt-simplejopt-simple4.9jopt-simple-4.9.jar;C:Userswsun3.m2repositorycomyammermetricsmetrics-core2.2.0metrics-core-2.2.0.jar;C:Userswsun3.m2repositoryorgscala-langscala-library2.11.8scala-library-2.11.8.jar;C:Userswsun3.m2repositorycom101teczkclient.9zkclient-0.9.jar;C:Userswsun3.m2repositoryorgapachezookeeperzookeeper3.4.8zookeeper-3.4.8.jar;C:Userswsun3.m2repositoryionettynetty3.7.0.Finalnetty-3.7.0.Final.jar;C:Userswsun3.m2repositoryorgscala-langmodulesscala-parser-combinators_2.111.0.4scala-parser-combinators_2.11-1.0.4.jar;C:Userswsun3.m2repositoryorgapachekafkakafka-clients.10.1.1kafka-clients-0.10.1.1.jar;C:Userswsun3.m2repositorynetjpountzlz4lz41.3.0lz4-1.3.0.jar;C:Userswsun3.m2repositoryorgxerialsnappysnappy-java1.1.2.6snappy-java-1.1.2.6.jar;C:Userswsun3.m2repositoryorgspringframeworkkafkaspring-kafka1.1.4.RELEASEspring-kafka-1.1.4.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkintegrationspring-integration-kafka2.1.0.RELEASEspring-integration-kafka-2.1.0.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkcloudspring-cloud-bus1.3.0.RELEASEspring-cloud-bus-1.3.0.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkcloudspring-cloud-stream1.2.1.RELEASEspring-cloud-stream-1.2.1.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkbootspring-boot-starter-validation1.5.3.RELEASEspring-boot-starter-validation-1.5.3.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkspring-messaging4.3.8.RELEASEspring-messaging-4.3.8.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkintegrationspring-integration-jmx4.3.9.RELEASEspring-integration-jmx-4.3.9.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkspring-tuple1.0.0.RELEASEspring-tuple-1.0.0.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkintegrationspring-integration-tuple1.0.0.RELEASEspring-integration-tuple-1.0.0.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkretryspring-retry1.2.0.RELEASEspring-retry-1.2.0.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkintegrationspring-integration-core4.3.9.RELEASEspring-integration-core-4.3.9.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkspring-tx4.3.8.RELEASEspring-tx-4.3.8.RELEASE.jar
2017-06-01 14:28:32,046  INFO main o.a.z.ZooKeeper:100 - Client environment:java.library.path=C:ProgramsJavajdk1.8.0_111bin;C:WINDOWSSunJavabin;C:WINDOWSsystem32;C:WINDOWS;C:/Programs/Java/jre/bin/server;C:/Programs/Java/jre/bin;C:/Programs/Java/jre/lib/amd64;C:appwsun3product11.2.0dbhome_1bin;%JAVA_HOME%bin;C:ProgramDataOracleJavajavapath;C:WINDOWSsystem32;C:WINDOWS;C:WINDOWSSystem32Wbem;C:WINDOWSSystem32WindowsPowerShellv1.0;C:Program Files (x86)Enterprise VaultEVClient;C:WINDOWSSystem32WindowsPowerShellv1.0;C:WindowsCCM;C:WindowsCCM;C:Program Files (x86)SennheiserSoftphoneSDK;C:Program FilesWIDCOMMBluetooth Software;C:Program FilesWIDCOMMBluetooth Softwaresyswow64;C:ProgramsGitcmd;C:Program FilesMicrosoft SQL Server130ToolsBinn;C:Program Files (x86)Windows Kits8.1Windows Performance Toolkit;C:ProgramsJavaStudiokafka_2.10-0.10.2.1binwindows;C:Programserl8.3bin;C:Python27;C:Program Files (x86)CVSNT;C:ProgramsJavaStudiosts-bundlests-3.8.4.RELEASE;;.
2017-06-01 14:28:32,046  INFO main o.a.z.ZooKeeper:100 - Client environment:java.io.tmpdir=C:Userswsun3AppDataLocalTemp
2017-06-01 14:28:32,046  INFO main o.a.z.ZooKeeper:100 - Client environment:java.compiler=
2017-06-01 14:28:32,046  INFO main o.a.z.ZooKeeper:100 - Client environment:os.name=Windows 7
2017-06-01 14:28:32,046  INFO main o.a.z.ZooKeeper:100 - Client environment:os.arch=amd64
2017-06-01 14:28:32,047  INFO main o.a.z.ZooKeeper:100 - Client environment:os.version=6.1
2017-06-01 14:28:32,047  INFO main o.a.z.ZooKeeper:100 - Client environment:user.name=wsun3
2017-06-01 14:28:32,047  INFO main o.a.z.ZooKeeper:100 - Client environment:user.home=C:Userswsun3
2017-06-01 14:28:32,047  INFO main o.a.z.ZooKeeper:100 - Client environment:user.dir=D:Workspacecloudspring-busconfig-server-eureka-kafka
2017-06-01 14:28:32,048  INFO main o.a.z.ZooKeeper:438 - Initiating client connection, connectString=localhost:2181 sessionTimeout=10000 watcher=org.I0Itec.zkclient.ZkClient@45f241df
2017-06-01 14:28:32,091  INFO main-SendThread(peer1:2181) o.a.z.ClientCnxn:1032 - Opening socket connection to server peer1/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error)
2017-06-01 14:28:32,095  INFO main-SendThread(peer1:2181) o.a.z.ClientCnxn:876 - Socket connection established to peer1/127.0.0.1:2181, initiating session
2017-06-01 14:28:32,200  INFO main-SendThread(peer1:2181) o.a.z.ClientCnxn:1299 - Session establishment complete on server peer1/127.0.0.1:2181, sessionid = 0x15c6231471c0006, negotiated timeout = 10000
2017-06-01 14:28:33,504  INFO main o.a.z.ZooKeeper:684 - Session: 0x15c6231471c0006 closed

从控制台的输出内容,我们可以看到config-server连接到了Kafka中,并使用了名为springCloudBus的Topic。

此时,我们可以使用kafka-topics –list –zookeeper localhost:2181命令来查看当前Kafka中的Topic,若已成功启动了config-server并配置正确,我们就可以在Kafka中看到已经多了一个名为springCloudBus的Topic。

我们再启动配置了spring-cloud-starter-bus-kafka模块的config-client,可以看到控制台中输出如下内容:

2017-06-01 14:34:06,716  INFO main o.s.c.s.b.k.p.KafkaTopicProvisioner:106 - Using kafka topic for outbound: springCloudBus
2017-06-01 14:34:08,044  INFO main o.a.z.ZooKeeper:100 - Client environment:zookeeper.version=3.4.8--1, built on 02/06/2016 03:18 GMT
2017-06-01 14:34:08,044  INFO main o.a.z.ZooKeeper:100 - Client environment:host.name=peer1
2017-06-01 14:34:08,044  INFO main o.a.z.ZooKeeper:100 - Client environment:java.version=1.8.0_111
2017-06-01 14:34:08,045  INFO main o.a.z.ZooKeeper:100 - Client environment:java.vendor=Oracle Corporation
2017-06-01 14:34:08,045  INFO main o.a.z.ZooKeeper:100 - Client environment:java.home=C:ProgramsJavajdk1.8.0_111jre
2017-06-01 14:34:08,045  INFO main o.a.z.ZooKeeper:100 - Client environment:java.class.path=D:Workspacecloudspring-busconfig-client-eureka-kafkatargetclasses;C:Userswsun3.m2repositoryorgspringframeworkretryspring-retry1.2.0.RELEASEspring-retry-1.2.0.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkspring-core4.3.8.RELEASEspring-core-4.3.8.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkbootspring-boot-starter-web1.5.3.RELEASEspring-boot-starter-web-1.5.3.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkbootspring-boot-starter1.5.3.RELEASEspring-boot-starter-1.5.3.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkbootspring-boot1.5.3.RELEASEspring-boot-1.5.3.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkbootspring-boot-autoconfigure1.5.3.RELEASEspring-boot-autoconfigure-1.5.3.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkbootspring-boot-starter-logging1.5.3.RELEASEspring-boot-starter-logging-1.5.3.RELEASE.jar;C:Userswsun3.m2repositorychqoslogbacklogback-classic1.1.11logback-classic-1.1.11.jar;C:Userswsun3.m2repositorychqoslogbacklogback-core1.1.11logback-core-1.1.11.jar;C:Userswsun3.m2repositoryorgslf4jjcl-over-slf4j1.7.25jcl-over-slf4j-1.7.25.jar;C:Userswsun3.m2repositoryorgslf4jjul-to-slf4j1.7.25jul-to-slf4j-1.7.25.jar;C:Userswsun3.m2repositoryorgslf4jlog4j-over-slf4j1.7.25log4j-over-slf4j-1.7.25.jar;C:Userswsun3.m2repositoryorgyamlsnakeyaml1.17snakeyaml-1.17.jar;C:Userswsun3.m2repositoryorgspringframeworkbootspring-boot-starter-tomcat1.5.3.RELEASEspring-boot-starter-tomcat-1.5.3.RELEASE.jar;C:Userswsun3.m2repositoryorgapachetomcatembedtomcat-embed-core8.5.14tomcat-embed-core-8.5.14.jar;C:Userswsun3.m2repositoryorgapachetomcatembedtomcat-embed-el8.5.14tomcat-embed-el-8.5.14.jar;C:Userswsun3.m2repositoryorgapachetomcatembedtomcat-embed-websocket8.5.14tomcat-embed-websocket-8.5.14.jar;C:Userswsun3.m2repositoryorghibernatehibernate-validator5.3.5.Finalhibernate-validator-5.3.5.Final.jar;C:Userswsun3.m2repositoryjavaxvalidationvalidation-api1.1.0.Finalvalidation-api-1.1.0.Final.jar;C:Userswsun3.m2repositoryorgjbossloggingjboss-logging3.3.1.Finaljboss-logging-3.3.1.Final.jar;C:Userswsun3.m2repositorycomfasterxmlclassmate1.3.3classmate-1.3.3.jar;C:Userswsun3.m2repositorycomfasterxmljacksoncorejackson-databind2.8.8jackson-databind-2.8.8.jar;C:Userswsun3.m2repositorycomfasterxmljacksoncorejackson-annotations2.8.0jackson-annotations-2.8.0.jar;C:Userswsun3.m2repositorycomfasterxmljacksoncorejackson-core2.8.8jackson-core-2.8.8.jar;C:Userswsun3.m2repositoryorgspringframeworkspring-web4.3.8.RELEASEspring-web-4.3.8.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkspring-beans4.3.8.RELEASEspring-beans-4.3.8.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkspring-context4.3.8.RELEASEspring-context-4.3.8.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkspring-webmvc4.3.8.RELEASEspring-webmvc-4.3.8.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkspring-expression4.3.8.RELEASEspring-expression-4.3.8.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkbootspring-boot-starter-aop1.5.3.RELEASEspring-boot-starter-aop-1.5.3.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkspring-aop4.3.8.RELEASEspring-aop-4.3.8.RELEASE.jar;C:Userswsun3.m2repositoryorgaspectjaspectjweaver1.8.10aspectjweaver-1.8.10.jar;C:Userswsun3.m2repositoryorgspringframeworkbootspring-boot-starter-actuator1.5.3.RELEASEspring-boot-starter-actuator-1.5.3.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkbootspring-boot-actuator1.5.3.RELEASEspring-boot-actuator-1.5.3.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkcloudspring-cloud-starter-config1.3.0.RELEASEspring-cloud-starter-config-1.3.0.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkcloudspring-cloud-starter1.2.0.RELEASEspring-cloud-starter-1.2.0.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkcloudspring-cloud-context1.2.0.RELEASEspring-cloud-context-1.2.0.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworksecurityspring-security-crypto4.2.2.RELEASEspring-security-crypto-4.2.2.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkcloudspring-cloud-commons1.2.0.RELEASEspring-cloud-commons-1.2.0.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworksecurityspring-security-rsa1.0.3.RELEASEspring-security-rsa-1.0.3.RELEASE.jar;C:Userswsun3.m2repositoryorgbouncycastlebcpkix-jdk15on1.55bcpkix-jdk15on-1.55.jar;C:Userswsun3.m2repositoryorgbouncycastlebcprov-jdk15on1.55bcprov-jdk15on-1.55.jar;C:Userswsun3.m2repositoryorgspringframeworkcloudspring-cloud-config-client1.3.0.RELEASEspring-cloud-config-client-1.3.0.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkcloudspring-cloud-starter-eureka1.3.0.RELEASEspring-cloud-starter-eureka-1.3.0.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkcloudspring-cloud-netflix-core1.3.0.RELEASEspring-cloud-netflix-core-1.3.0.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkcloudspring-cloud-netflix-eureka-client1.3.0.RELEASEspring-cloud-netflix-eureka-client-1.3.0.RELEASE.jar;C:Userswsun3.m2repositorycomnetflixeurekaeureka-client1.6.2eureka-client-1.6.2.jar;C:Userswsun3.m2repositoryorgcodehausjettisonjettison1.3.7jettison-1.3.7.jar;C:Userswsun3.m2repositorystaxstax-api1.0.1stax-api-1.0.1.jar;C:Userswsun3.m2repositorycomnetflixnetflix-commonsnetflix-eventbus.3.0netflix-eventbus-0.3.0.jar;C:Userswsun3.m2repositorycomnetflixnetflix-commonsnetflix-infix.3.0netflix-infix-0.3.0.jar;C:Userswsun3.m2repositorycommons-jxpathcommons-jxpath1.3commons-jxpath-1.3.jar;C:Userswsun3.m2repositoryjoda-timejoda-time2.9.9joda-time-2.9.9.jar;C:Userswsun3.m2repositoryorgantlrantlr-runtime3.4antlr-runtime-3.4.jar;C:Userswsun3.m2repositoryorgantlrstringtemplate3.2.1stringtemplate-3.2.1.jar;C:Userswsun3.m2repositoryantlrantlr2.7.7antlr-2.7.7.jar;C:Userswsun3.m2repositorycomgooglecodegsongson2.8.0gson-2.8.0.jar;C:Userswsun3.m2repositoryorgapachecommonscommons-math2.2commons-math-2.2.jar;C:Userswsun3.m2repositorycomnetflixarchaiusarchaius-core.7.4archaius-core-0.7.4.jar;C:Userswsun3.m2repositoryjavaxwsrsjsr311-api1.1.1jsr311-api-1.1.1.jar;C:Userswsun3.m2repositorycomnetflixservoservo-core.10.1servo-core-0.10.1.jar;C:Userswsun3.m2repositorycomnetflixservoservo-internal.10.1servo-internal-0.10.1.jar;C:Userswsun3.m2repositorycomsunjerseyjersey-core1.19.1jersey-core-1.19.1.jar;C:Userswsun3.m2repositorycomsunjerseyjersey-client1.19.1jersey-client-1.19.1.jar;C:Userswsun3.m2repositorycomsunjerseycontribsjersey-apache-client41.19.1jersey-apache-client4-1.19.1.jar;C:Userswsun3.m2repositoryorgapachehttpcomponentshttpclient4.5.3httpclient-4.5.3.jar;C:Userswsun3.m2repositoryorgapachehttpcomponentshttpcore4.4.6httpcore-4.4.6.jar;C:Userswsun3.m2repositorycommons-codeccommons-codec1.10commons-codec-1.10.jar;C:Userswsun3.m2repositorycomgoogleinjectguice4.1.0guice-4.1.0.jar;C:Userswsun3.m2repositoryjavaxinjectjavax.inject1javax.inject-1.jar;C:Userswsun3.m2repositoryaopallianceaopalliance1.0aopalliance-1.0.jar;C:Userswsun3.m2repositorycomnetflixeurekaeureka-core1.6.2eureka-core-1.6.2.jar;C:Userswsun3.m2repositoryorgcodehauswoodstoxwoodstox-core-asl4.4.1woodstox-core-asl-4.4.1.jar;C:Userswsun3.m2repositoryjavaxxmlstreamstax-api1.0-2stax-api-1.0-2.jar;C:Userswsun3.m2repositoryorgcodehauswoodstoxstax2-api3.1.4stax2-api-3.1.4.jar;C:Userswsun3.m2repositoryorgspringframeworkcloudspring-cloud-starter-archaius1.3.0.RELEASEspring-cloud-starter-archaius-1.3.0.RELEASE.jar;C:Userswsun3.m2repositorycommons-configurationcommons-configuration1.8commons-configuration-1.8.jar;C:Userswsun3.m2repositorycommons-langcommons-lang2.6commons-lang-2.6.jar;C:Userswsun3.m2repositorycomgoogleguavaguava18.0guava-18.0.jar;C:Userswsun3.m2repositoryorgspringframeworkcloudspring-cloud-starter-ribbon1.3.0.RELEASEspring-cloud-starter-ribbon-1.3.0.RELEASE.jar;C:Userswsun3.m2repositorycomnetflixribbonribbon2.2.2ribbon-2.2.2.jar;C:Userswsun3.m2repositorycomnetflixribbonribbon-transport2.2.2ribbon-transport-2.2.2.jar;C:Userswsun3.m2repositoryioreactivexrxnetty-contexts.4.9rxnetty-contexts-0.4.9.jar;C:Userswsun3.m2repositoryioreactivexrxnetty-servo.4.9rxnetty-servo-0.4.9.jar;C:Userswsun3.m2repositorycomnetflixhystrixhystrix-core1.5.10hystrix-core-1.5.10.jar;C:Userswsun3.m2repositoryorghdrhistogramHdrHistogram2.1.9HdrHistogram-2.1.9.jar;C:Userswsun3.m2repositoryioreactivexrxnetty.4.9rxnetty-0.4.9.jar;C:Userswsun3.m2repositoryionettynetty-codec-http4.0.27.Finalnetty-codec-http-4.0.27.Final.jar;C:Userswsun3.m2repositoryionettynetty-codec4.0.27.Finalnetty-codec-4.0.27.Final.jar;C:Userswsun3.m2repositoryionettynetty-handler4.0.27.Finalnetty-handler-4.0.27.Final.jar;C:Userswsun3.m2repositoryionettynetty-transport-native-epoll4.0.27.Finalnetty-transport-native-epoll-4.0.27.Final.jar;C:Userswsun3.m2repositoryionettynetty-common4.0.27.Finalnetty-common-4.0.27.Final.jar;C:Userswsun3.m2repositoryionettynetty-buffer4.0.27.Finalnetty-buffer-4.0.27.Final.jar;C:Userswsun3.m2repositoryionettynetty-transport4.0.27.Finalnetty-transport-4.0.27.Final.jar;C:Userswsun3.m2repositorycomnetflixribbonribbon-core2.2.2ribbon-core-2.2.2.jar;C:Userswsun3.m2repositorycomnetflixribbonribbon-httpclient2.2.2ribbon-httpclient-2.2.2.jar;C:Userswsun3.m2repositorycommons-collectionscommons-collections3.2.2commons-collections-3.2.2.jar;C:Userswsun3.m2repositorycomnetflixnetflix-commonsnetflix-commons-util.1.1netflix-commons-util-0.1.1.jar;C:Userswsun3.m2repositorycomnetflixribbonribbon-loadbalancer2.2.2ribbon-loadbalancer-2.2.2.jar;C:Userswsun3.m2repositorycomnetflixnetflix-commonsnetflix-statistics.1.1netflix-statistics-0.1.1.jar;C:Userswsun3.m2repositoryioreactivexrxjava1.1.10rxjava-1.1.10.jar;C:Userswsun3.m2repositorycomnetflixribbonribbon-eureka2.2.2ribbon-eureka-2.2.2.jar;C:Userswsun3.m2repositoryorgslf4jslf4j-api1.7.25slf4j-api-1.7.25.jar;C:Userswsun3.m2repositorycomthoughtworksxstreamxstream1.4.9xstream-1.4.9.jar;C:Userswsun3.m2repositoryxmlpullxmlpull1.1.3.1xmlpull-1.1.3.1.jar;C:Userswsun3.m2repositoryxpp3xpp3_min1.1.4cxpp3_min-1.1.4c.jar;C:Userswsun3.m2repositoryorgspringframeworkcloudspring-cloud-starter-bus-kafka1.3.0.RELEASEspring-cloud-starter-bus-kafka-1.3.0.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkcloudspring-cloud-starter-stream-kafka1.2.0.RELEASEspring-cloud-starter-stream-kafka-1.2.0.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkcloudspring-cloud-stream-binder-kafka1.2.0.RELEASEspring-cloud-stream-binder-kafka-1.2.0.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkcloudspring-cloud-stream-binder-kafka-core1.2.0.RELEASEspring-cloud-stream-binder-kafka-core-1.2.0.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkcloudspring-cloud-stream-codec1.2.1.RELEASEspring-cloud-stream-codec-1.2.1.RELEASE.jar;C:Userswsun3.m2repositorycomesotericsoftwarekryo-shaded3.0.3kryo-shaded-3.0.3.jar;C:Userswsun3.m2repositorycomesotericsoftwareminlog1.3.0minlog-1.3.0.jar;C:Userswsun3.m2repositoryorgobjenesisobjenesis2.1objenesis-2.1.jar;C:Userswsun3.m2repositoryorgapachekafkakafka_2.11.10.1.1kafka_2.11-0.10.1.1.jar;C:Userswsun3.m2repositorynetsfjopt-simplejopt-simple4.9jopt-simple-4.9.jar;C:Userswsun3.m2repositorycomyammermetricsmetrics-core2.2.0metrics-core-2.2.0.jar;C:Userswsun3.m2repositoryorgscala-langscala-library2.11.8scala-library-2.11.8.jar;C:Userswsun3.m2repositorycom101teczkclient.9zkclient-0.9.jar;C:Userswsun3.m2repositoryorgapachezookeeperzookeeper3.4.8zookeeper-3.4.8.jar;C:Userswsun3.m2repositoryionettynetty3.7.0.Finalnetty-3.7.0.Final.jar;C:Userswsun3.m2repositoryorgscala-langmodulesscala-parser-combinators_2.111.0.4scala-parser-combinators_2.11-1.0.4.jar;C:Userswsun3.m2repositoryorgapachekafkakafka-clients.10.1.1kafka-clients-0.10.1.1.jar;C:Userswsun3.m2repositorynetjpountzlz4lz41.3.0lz4-1.3.0.jar;C:Userswsun3.m2repositoryorgxerialsnappysnappy-java1.1.2.6snappy-java-1.1.2.6.jar;C:Userswsun3.m2repositoryorgspringframeworkkafkaspring-kafka1.1.4.RELEASEspring-kafka-1.1.4.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkintegrationspring-integration-kafka2.1.0.RELEASEspring-integration-kafka-2.1.0.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkcloudspring-cloud-bus1.3.0.RELEASEspring-cloud-bus-1.3.0.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkcloudspring-cloud-stream1.2.1.RELEASEspring-cloud-stream-1.2.1.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkbootspring-boot-starter-validation1.5.3.RELEASEspring-boot-starter-validation-1.5.3.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkspring-messaging4.3.8.RELEASEspring-messaging-4.3.8.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkintegrationspring-integration-jmx4.3.9.RELEASEspring-integration-jmx-4.3.9.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkspring-tuple1.0.0.RELEASEspring-tuple-1.0.0.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkintegrationspring-integration-tuple1.0.0.RELEASEspring-integration-tuple-1.0.0.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkintegrationspring-integration-core4.3.9.RELEASEspring-integration-core-4.3.9.RELEASE.jar;C:Userswsun3.m2repositoryorgspringframeworkspring-tx4.3.8.RELEASEspring-tx-4.3.8.RELEASE.jar
2017-06-01 14:34:08,100  INFO main o.a.z.ZooKeeper:100 - Client environment:java.library.path=C:ProgramsJavajdk1.8.0_111bin;C:WINDOWSSunJavabin;C:WINDOWSsystem32;C:WINDOWS;C:/Programs/Java/jre/bin/server;C:/Programs/Java/jre/bin;C:/Programs/Java/jre/lib/amd64;C:appwsun3product11.2.0dbhome_1bin;%JAVA_HOME%bin;C:ProgramDataOracleJavajavapath;C:WINDOWSsystem32;C:WINDOWS;C:WINDOWSSystem32Wbem;C:WINDOWSSystem32WindowsPowerShellv1.0;C:Program Files (x86)Enterprise VaultEVClient;C:WINDOWSSystem32WindowsPowerShellv1.0;C:WindowsCCM;C:WindowsCCM;C:Program Files (x86)SennheiserSoftphoneSDK;C:Program FilesWIDCOMMBluetooth Software;C:Program FilesWIDCOMMBluetooth Softwaresyswow64;C:ProgramsGitcmd;C:Program FilesMicrosoft SQL Server130ToolsBinn;C:Program Files (x86)Windows Kits8.1Windows Performance Toolkit;C:ProgramsJavaStudiokafka_2.10-0.10.2.1binwindows;C:Programserl8.3bin;C:Python27;C:Program Files (x86)CVSNT;C:ProgramsJavaStudiosts-bundlests-3.8.4.RELEASE;;.
2017-06-01 14:34:08,100  INFO main o.a.z.ZooKeeper:100 - Client environment:java.io.tmpdir=C:Userswsun3AppDataLocalTemp
2017-06-01 14:34:08,101  INFO main o.a.z.ZooKeeper:100 - Client environment:java.compiler=
2017-06-01 14:34:08,102  INFO main o.a.z.ZooKeeper:100 - Client environment:os.name=Windows 7
2017-06-01 14:34:08,102  INFO main o.a.z.ZooKeeper:100 - Client environment:os.arch=amd64
2017-06-01 14:34:08,102  INFO main o.a.z.ZooKeeper:100 - Client environment:os.version=6.1
2017-06-01 14:34:08,103  INFO main o.a.z.ZooKeeper:100 - Client environment:user.name=wsun3
2017-06-01 14:34:08,104  INFO main o.a.z.ZooKeeper:100 - Client environment:user.home=C:Userswsun3
2017-06-01 14:34:08,104  INFO main o.a.z.ZooKeeper:100 - Client environment:user.dir=D:Workspacecloudspring-busconfig-client-eureka-kafka
2017-06-01 14:34:08,106  INFO main o.a.z.ZooKeeper:438 - Initiating client connection, connectString=localhost:2181 sessionTimeout=10000 watcher=org.I0Itec.zkclient.ZkClient@3f267e1b
2017-06-01 14:34:08,161  INFO main-SendThread(peer1:2181) o.a.z.ClientCnxn:1032 - Opening socket connection to server peer1/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error)
2017-06-01 14:34:08,164  INFO main-SendThread(peer1:2181) o.a.z.ClientCnxn:876 - Socket connection established to peer1/127.0.0.1:2181, initiating session
2017-06-01 14:34:08,208  INFO main-SendThread(peer1:2181) o.a.z.ClientCnxn:1299 - Session establishment complete on server peer1/127.0.0.1:2181, sessionid = 0x15c6231471c000a, negotiated timeout = 10000
2017-06-01 14:34:09,074  INFO main o.a.z.ZooKeeper:684 - Session: 0x15c6231471c000a closed

可以看到,config-client启动时输出了类似的内容,他们都订阅了名为springCloudBus的Topic。

在启动了config-server和config-client之后,为了更明显地观察消息总线刷新配置的效果,我们可以在本地启动多个不同端口的config-client。此时,我们的config-server以及多个config-client都已经连接到了由Kafka实现的消息总线上。我们可以先访问各个config-client上的/from请求,查看他获取到的配置内容。然后,修改Git中对应的参数内容,再访问各个config-client上的/from请求,可以看到配置内容并没有改变。最后,我们向config-server发送POST请求:/bus/refresh,此时我们再去访问各个config-client上的/from请求,就能获得到最新的配置信息,各客户端上的配置都已经加载为最新的Git配置内容。

从config-client的控制台中,我们可以看到如下内容:

2017-06-01 14:43:19,196  INFO -L-1 o.s.c.b.e.RefreshListener:44 - Received remote refresh request. Keys refreshed [from]
2017-06-01 14:43:20,604  INFO -L-1 o.s.c.b.e.RefreshListener:44 - Received remote refresh request. Keys refreshed [from]

RefreshListener监听类记录了收到远程刷新请求,并刷新了from属性的日志。

完整示例:spring-bus

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:qvyue@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。