描述:我正在做一个有 2 个服务的本地项目。配置服务器(连接到 git 并获取属性)和产品服务。目前,如果我在配置存储中更新属性……
描述:我正在做一个有 2 个服务的本地项目。配置服务器(连接到 git 并获取属性)和产品服务。目前,如果我在配置存储中更新属性,我需要在产品微服务中进行手动刷新,这将刷新配置服务器并更新属性。
但是如果我们有多个服务,我们就无法做到这一点。因此我的朋友建议我使用dockerized kafka。最近几天尝试将其集成到我的微服务中。注意:我的ms不是dockerized。因为我会这样做。现在我的项目计划中不需要它。
这是我的代码:
配置服务器应用程序.yaml
server:
port: 8071
spring:
application:
name: configserver
profiles:
active: git
cloud:
config:
server:
git:
uri: "https://github.com/xxxx/swiftcart-config-store"
searchPaths: "configs/{application},configs/common"
cloneOnStart: true
kafka:
enabled: true
topic: config-updates
bootstrap-servers: "localhost:9092"
bus:
enabled: true # Enable Spring Cloud Bus
产品服务应用程序.yaml
server:
port: 8081
spring:
application:
name: product-service
profiles:
active: dev
config:
import: "optional:configserver:http://localhost:8071/"
kafka:
bootstrap-servers: localhost:9092
consumer:
group-id: product-service-group
auto-offset-reset: earliest
template:
default-topic: config-updates
cloud:
bus:
enabled: true # Enable Spring Cloud Bus
management:
endpoints:
web:
exposure:
include: "*"
endpoint:
health:
show-details: always
refresh:
enabled: true
springdoc:
api-docs:
path: /v3/api-docs
swagger-ui:
path: /swagger-ui.html
logging:
level:
org.springframework.kafka: DEBUG
org.apache.kafka: DEBUG
我在其他目录中创建的 Docker compose.yaml
version: '3.8'
services:
kafka:
image: confluentinc/cp-kafka:7.2.0
ports:
- "9092:9092"
environment:
- KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181
- KAFKA_LISTENERS=PLAINTEXT:PLAINTEXT://0.0.0.0:9092,PLAINTEXT_HOST://0.0.0.0:29092
- KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092,PLAINTEXT_HOST://kafka:29092
- KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1
- KAFKA_GROUP_INITIAL_OFFSET_CONFIG=earliest
networks:
- swiftcart_network
zookeeper:
image: confluentinc/cp-zookeeper:7.2.0
ports:
- "2181:2181"
environment:
- ZOOKEEPER_CLIENT_PORT=2181
networks:
- swiftcart_network
kafdrop:
image: obsidiandynamics/kafdrop:latest
ports:
- "9000:9000"
environment:
- KAFKA_BROKERCONNECT=kafka:9092
networks:
- swiftcart_network
networks:
swiftcart_network:
driver: bridge
那么问题是什么?当我刷新配置服务器时,它没有刷新微服务。它甚至没有更新配置服务器。
我用来刷新配置服务器的 URL:
http://localhost:8071/actuator/bus-refreshhttp://localhost:8071/actuator/refresh
但是,如果我刷新产品服务,http://localhost:8081/actuator/refreshProperties将会更新。
如果您对此有任何想法,请告诉我。非常感谢。
假设您的问题是配置刷新不发生。注意 - 我在这里没有使用 Kafka。
请检查下面今天运行的 github 代码,以便在无需重启的情况下使用客户端服务上的执行器进行刷新。
我已经在 github 属性上更改了作者姓名并运行刷新,从而从 github 更新了客户端配置文件和配置服务器配置。
Client boot properties :-
server.port=8080
spring.application.name=a-bootiful-client
spring.config.import=optional:configserver:http://localhost:8888/
management.endpoints.web.exposure.include=*
spring.cloud.config.uri=http://localhost:8888
management.security.enabled=false
https://github.com/Roshanmutha/rcmuthaconfigserver/blob/master/README.md
Boot Config server properties:-
server.port=8888
spring.cloud.config.server.git.uri=https://github.com/Roshanmutha/Configuration
spring.cloud.config.server.git.default-label=master
完整代码: https://github.com/Roshanmutha/rcmutha-configclient - 使用属性的客户端 https://github.com/Roshanmutha/rcmuthaconfigserver - 配置服务器 https://github.com/Roshanmutha/Configuration - Github 配置
$ curl --location --request POST 'http://localhost:8080/actuator/refresh' % 总计 % 已接收 % Xferd 平均速度 时间 时间 当前 Dload 上传 总耗费 剩余速度 100 39 0 39 0 0 14 0 --:--:-- 0:00:02 --:--:-- 14[\'config.client.version\',\'auther.name\']
附言:我会尝试使用 kafka,并在几天后发布。谢谢