Я разработчик Java, использую Spring Cloud Config Server для конфигурации динамического обновления с Kafka.
Я прилагаю файлы конфигурации (файлы pom и boostrap / application) для стороны SERVER и CLIENT: у клиента есть файлы .properties, а на сервере .yaml.
Я запустил службы kafka и zookeper, запустив Docker-контейнер по ссылке:
https://hub.docker.com/r/johnnypark/kafka-zookeeper/
в котором я устанавливаю только количество разделов в 1 единице.
Я запустил сервер и клиент. Я установил gitlab webhook для Push-события и правильно, когда push-событие сервер получает событие: я запихнул файл yaml templateservice-dev.yaml, в котором я изменил описание ключа:
сообщение: Hello -> сообщение: Hello UPDATE
Структура репозитория конфигурации:
Root Folder:
templateservice
|--->templateservice-dev.yaml
|--->templateservice-prod.yaml
|--->templateservice.yaml
Каждый файл имеет только 1 ключ:
сообщение: Hello
В этом случае у нас странное поведение, при котором сервер понимает редактирование файла templateservice-dev.yaml, но ключ (который обновлен) пуст. В журнале у нас есть:
o.s.c.c.monitor.PropertyPathEndpoint: обновление для: templateservice-dev
o.s.cloud.bus.event.RefreshListener: получен удаленный запрос на обновление. Ключи обновились []
очевидно, что журнал клиента пуст, потому что сервер ему ничего не отправляет.
Я использовал почтальон для вызова /actuator/bus-refresh
для клиента, и он работает правильно: действительно, значение свойства обновляется (на стороне клиента контроллера есть @RefreshScope
аннотация).
Java, Spring Boot, кафка, 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>
(SERVER) файл начальной загрузки 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: '*'
(SERVER) файл приложения yaml:
server:
port: 8899
(CLIENT) Свойства файла начальной загрузки:
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 не отправляет изменения в шине.