Spring Cloud Bus
来源:互联网 发布:通信工程预算软件 编辑:程序博客网 时间:2024/03/29 02:42
在前面学习Spring Cloud Config的时候最后留了一个尾巴,当我们微服务结点的量级达到一定规模时,一个个维护和refresh服务结点动态更新最新配置信息将会成为一个很费精力的问题,所以Spring framework又推出个新套件Spring Cloud Bus消息总线。
Spring Cloud Bus需要依赖一种MQ,我们这里选择比较流行的RabbitMQ和Kafka。关于两者的原理我们前面博文有分析,在这里只是载体,我直接用docker方式简单安装一个。如果docker的原理和操作还不是很熟练,请从Docker的原理和安装开始练习。
我们的微服务搭建如下:
以RabbitMQ方式集成:
RabbitMQ的环境准备(RabbitMQ)
Eureka-Server代码地址:https://github.com/yejingtao/forblog/tree/master/demo-eureka-register
Config-Server代码地址:https://github.com/yejingtao/forblog/tree/master/demo3-config-server
Config-Client代码地址:https://github.com/yejingtao/forblog/tree/master/demo3-config-client
Config-ServerPom依赖:
<dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId></dependency><dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</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></dependencies>Config-ClientPom依赖:
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bus-amqp</artifactId> </dependency> </dependencies>
疑问:Server和Client的Actuator是否都是必须依赖的?
回答:向谁发起/bus/refresh就给谁依赖actuator,所以向config-server发起refresh的话,client的actuator不是必须的。
Config_server的参数配置:
server: port: 8001 spring: cloud: config: server: git: uri: https://github.com/yejingtao/forblog search-paths: /config username: username password: password application: name: config-server rabbitmq: host: 192.168.226.130 port: 5672 username: guest password: guesteureka: client: serviceUrl: defaultZone: http://peer1:1111/eureka/,http://peer2:1112/eureka/management: security: enabled: falseConfig-Client的参数配置:
spring.application.name=configtestspring.cloud.config.profile=devspring.cloud.config.label=masterserver.port=7002#management.security.enabled=falseeureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/,http://peer2:1112/eureka/spring.cloud.config.discovery.enabled=truespring.cloud.config.discovery.serviceId=config-serverspring.rabbitmq.host=192.168.226.130spring.rabbitmq.port=5672spring.rabbitmq.username=guestspring.rabbitmq.password=guest
注:多了RabbitMq的配置,5672是rabbitMq的默认服务地址
Java代码没有变化,不再详解,验证步骤:
1) 启动Config-Server和Config-Client,GET请求client的/from,看到git上的old value;
2) 修改git上的内容
3) POST 请求server的/bus/refresh,再GET请求client的/from看到git上的new value。
注:POST请求可以用curl
以Kafka方式集成:
Kafka的环境准备(Kafka原理详解)
Eureka-Server代码地址:https://github.com/yejingtao/forblog/tree/master/demo-eureka-register
Config-Server代码地址:https://github.com/yejingtao/forblog/tree/master/demo4-config-server
Config-Client代码地址:https://github.com/yejingtao/forblog/tree/master/demo4-config-client
Pom.xml的依赖稍作修改,用spring-cloud-starter-bus-kafka替换spring-cloud-starter-bus-amqp
参数配置稍作修改,用kafka的配置替换RabbitMQ的配置:Config_server的参数配置:
server: port: 8001 spring: cloud: config: server: git: uri: https://github.com/yejingtao/forblog search-paths: /config username: username password: password stream: kafka: binder: brokers: 192.168.226.130 defaultBrokerPort: 9092 zkNodes: 192.168.226.130 defaultZkPort: 2181 application: name: config-servereureka: client: serviceUrl: defaultZone: http://peer1:1111/eureka/,http://peer2:1112/eureka/management: security: enabled: falseConfig-Client的参数配置:
spring.application.name=configtestspring.cloud.config.profile=devspring.cloud.config.label=masterserver.port=7002#management.security.enabled=falseeureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/,http://peer2:1112/eureka/spring.cloud.config.discovery.enabled=truespring.cloud.config.discovery.serviceId=config-serverspring.cloud.stream.kafka.binder.brokers=192.168.226.130spring.cloud.stream.kafka.binder.defaultBrokerPort=9092spring.cloud.stream.kafka.binder.zkNodes=192.168.226.130spring.cloud.stream.kafka.binder.defaultZkPort=2181
Java代码、验证步骤不存在变化,不再解释。
注:用kafka来做mq实现bus的时候,无论是config的server端还是client端在启动的时候都会打印出以下默认参数:
auto.commit.interval.ms = 100auto.offset.reset = latestbootstrap.servers = [192.168.226.130:9092]check.crcs = trueclient.id = connections.max.idle.ms = 540000enable.auto.commit = falseexclude.internal.topics = truefetch.max.bytes = 52428800fetch.max.wait.ms = 500fetch.min.bytes = 1group.id = anonymous.73cf1d38-c6c1-4615-9361-0a314f34cbdeheartbeat.interval.ms = 3000interceptor.classes = nullkey.deserializer = class org.apache.kafka.common.serialization.ByteArrayDeserializermax.partition.fetch.bytes = 1048576max.poll.interval.ms = 300000max.poll.records = 500metadata.max.age.ms = 300000metric.reporters = []metrics.num.samples = 2metrics.sample.window.ms = 30000partition.assignment.strategy = [class org.apache.kafka.clients.consumer.RangeAssignor]receive.buffer.bytes = 65536reconnect.backoff.ms = 50request.timeout.ms = 305000retry.backoff.ms = 100sasl.kerberos.kinit.cmd = /usr/bin/kinitsasl.kerberos.min.time.before.relogin = 60000sasl.kerberos.service.name = nullsasl.kerberos.ticket.renew.jitter = 0.05sasl.kerberos.ticket.renew.window.factor = 0.8sasl.mechanism = GSSAPIsecurity.protocol = PLAINTEXTsend.buffer.bytes = 131072session.timeout.ms = 10000ssl.cipher.suites = nullssl.enabled.protocols = [TLSv1.2, TLSv1.1, TLSv1]ssl.endpoint.identification.algorithm = nullssl.key.password = nullssl.keymanager.algorithm = SunX509ssl.keystore.location = nullssl.keystore.password = nullssl.keystore.type = JKSssl.protocol = TLSssl.provider = nullssl.secure.random.implementation = nullssl.trustmanager.algorithm = PKIXssl.truststore.location = nullssl.truststore.password = nullssl.truststore.type = JKSvalue.deserializer = class org.apache.kafka.common.serialization.ByteArrayDeserializer
- Spring Cloud Bus 教程
- Spring Cloud Bus
- Spring Cloud Bus
- Spring Cloud Bus
- Spring cloud-Bus (消息总线)
- Spring Cloud Bus整合RabbitMQ
- Spring Cloud Bus整合Kafka
- Spring Cloud Bus 配置更新
- Spring Cloud实战(六)-Spring Cloud Netflix Bus
- Spring-Cloud系列第6篇:spring-cloud-bus
- Spring Cloud实战(六)-Spring Cloud Netflix Bus
- Spring Cloud 之Spring Cloud Bus(二)
- spring cloud bus 和 spring cloud stream 的使用场景
- Spring Cloud (3) | spring cloud bus 消息总线kafka应用
- 第八篇: 消息总线(Spring Cloud Bus)
- Spring Cloud Bus之RabbitMQ初窥
- Spring Cloud Bus 消息总线集成Kafka
- SpringCloud教程 | 第八篇: 消息总线(Spring Cloud Bus)
- 初识Linux之root 超级用户与普通用户切换
- lua源码阅读(4)---表
- JS节点的属性及方法
- java的反射机制
- Android---保存数据工具类
- Spring Cloud Bus
- ArrayBlockingQueue源码讲解
- android对话框外全部透明样式
- Faster-RCNN_TF代码解读8:networks.py
- webpack踩坑之路——图片的路径与打包
- 贝叶斯相关(整理)
- hdu 6208 The Dominator of Strings
- 深入java 使用正则表达式
- STL中的sort函数