我是一名Java开发人员,正在使用Spring Cloud Config Server进行Kafka的动态刷新配置。 我为服务器和客户端附加了配置文件(pom和boostrap /应用程序文件):客户端具有.properties文件,而服务器.yaml文件。
我通过在链接处运行docker容器来启动kafka和zookeper服务: https://hub.docker.com/r/johnnypark/kafka-zookeeper/ 我只以1个单位设置分区数。
我启动了服务器和客户端。我为推送事件设置了gitlab webhook,并在推送事件时正确设置了服务器接收到该事件:我推送了文件yaml templateservice-dev.yaml,在其中我更改了键的描述:
消息:你好->消息:你好更新
配置存储库的结构为:
Root Folder:
templateservice
|--->templateservice-dev.yaml
|--->templateservice-prod.yaml
|--->templateservice.yaml
每个文件只有1个键:
消息:您好
在这种情况下,我们有一个奇怪的行为,即服务器可以理解对templateservice-dev.yaml文件的编辑,但是密钥(已更新)为空。在日志中,我们有:
o.s.c.c.monitor.PropertyPathEndpoint:刷新:templateservice-dev o.s.cloud.bus.event.RefreshListener:接收到的远程刷新请求。按键已刷新[]
显然,客户端的日志为空,因为服务器未向其发送任何内容。
我使用邮递员为客户端调用/actuator/bus-refresh
,它可以正常工作:实际上,属性值已更新(控制器客户端具有@RefreshScope
批注)。
Java,Spring Boot,kafka,Spring Cloud
提取pom.xml服务器:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-kafka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-monitor</artifactId>
</dependency>
提取pom.xml客户端:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-kafka</artifactId>
</dependency>
(服务器)引导文件yaml:
spring:
stream:
kafka:
binder:
brokers: "localhost:9092"
zkNodes: "localhost:2181"
autoAddPartitions: true
application:
name: config-server
profiles:
include: dev,prod
cloud:
bus:
enabled: true
env:
enabled: true
refresh:
enabled: true
config:
label: develop
server:
git:
uri: http://gitserver.devops.it/gitlab/backend/config-server-repo.git
search-paths: t*,c*
force-pull: true
username: user
password: password
default-label: develop
monitor:
gitlab:
enabled: true
management:
endpoints:
web:
exposure:
include: '*'
(服务器)应用程序文件yaml:
server:
port: 8899
(客户端)引导文件属性:
spring.profiles.active=dev
spring.cloud.config.uri=http://config-server:8899
spring.cloud.config.label=develop
spring.application.name=templateservice
management.endpoints.web.exposure.include=*
spring.cloud.bus.trace.enabled=true
spring.cloud.bus.enabled=true
spring.cloud.bus.env.enabled=true
spring.cloud.bus.refresh.enabled=true
spring.cloud.stream.kafka.binder.zkNodes=localhost:2181
spring.cloud.stream.kafka.binder.brokers=localhost:9092
spring.cloud.stream.kafka.binder.autoAddPartitions=true
endpoints.spring.cloud.bus.refresh.enabled=true
endpoints.spring.cloud.bus.env.enabled=true
似乎/ monitor端点没有在总线上发送更改。