簡體   English   中英

如何使用 spring cloud config server 和 spring cloud bus with rabbit mq 更新配置?

[英]How to update configurations using spring cloud config server and spring cloud bus with rabbit mq?

我找不到任何最新的和/或工作文檔和/或關於如何設置它的示例,所以我所做的是研究和嘗試錯誤。 然而,我一直無法讓它運行。

我有一個具有以下依賴項的配置服務器

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
    <version>2.2.1.RELEASE</version>
</dependency>

配置服務器具有以下bootstrap.yml

spring:
  application:
    name: config-server
  rabbitmq:
    host: ${RABBIT_MQ_HOST:localhost}
    port: ${RABBIT_MQ_PORT:5672}
    username: ${RABBIT_MQ_URSER_NAME:guest}
    password: ${RABBIT_MQ_URSER_PASSWORD:guest}

而下面的application.yml

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/MyGit/config-repository.git
          cloneOnStart: true

management:
  endpoints:
    web:
      exposure:
        include: "*"

server:
  port: 8888

我的所有客戶都具有以下依賴項:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
    <version>2.2.1.RELEASE</version>
</dependency>

例如他們的bootstrap.yml看起來像這樣:

spring:
  application:
    name: user-service
  cloud:
    config:
      uri: http://${CONFIG_HOST:localhost}:${CONFIG_PORT:8888}
  rabbitmq:
    host: ${RABBIT_MQ_HOST:localhost}
    port: ${RABBIT_MQ_PORT:5672}
    username: ${RABBIT_MQ_URSER_NAME:guest}
    password: ${RABBIT_MQ_URSER_PASSWORD:guest}

他們的application.yml是這樣的:

management:
  endpoints:
    web:
      exposure:
        include: "*"

server:
  port: 8000

eureka:
  client:
    registerWithEureka: true
    fetchRegistry: true
    serviceUrl:
      defaultZone: http://${EUREKA_HOST:localhost}:${EUREKA_PORT:8761}/eureka

我使用 springs @ConfigurationProperties ,例如:

@Component
@ConfigurationProperties("user")
@Getter
@Setter
public class UserConfiguration {
    private String role;
}

我開始我的所有服務使用(包括RabbitMQ的) dockerdocker-compose

version: "3"

services:

  rabbitmq:
    image: bitnami/rabbitmq:latest
    container_name: rabbitmq
    environment:
      RABBITMQ_USERNAME: admin
      RABBITMQ_PASSWORD: admin
    ports:
      - "4369:4369"
      - "5672:5672"
      - "15672:15672"
      - "25672:25672"

  config-server:
    build:
      context: config-server
      dockerfile: Dockerfile
    container_name: config-server
    depends_on:
      - rabbitmq
    environment:
      RABBIT_MQ_HOST: "rabbitmq"
      RABBIT_MQ_PORT: "5672"
      RABBIT_MQ_URSER_NAME: "admin"
      RABBIT_MQ_URSER_PASSWORD: "admin"
    ports:
      - "8888:8888"

  eureka-server:
    build:
      context: eureka-server
      dockerfile: Dockerfile
    container_name: eureka-server
    depends_on:
      - rabbitmq
      - config-server
    environment:
      RABBIT_MQ_HOST: "rabbitmq"
      RABBIT_MQ_PORT: "5672"
      RABBIT_MQ_URSER_NAME: "admin"
      RABBIT_MQ_URSER_PASSWORD: "admin"
      CONFIG_HOST: "config-server"
      CONFIG_PORT: "8888"
    ports:
      - "8761:8761"

  zuul-gateway:
    build:
      context: zuul-gateway
      dockerfile: Dockerfile
    container_name: zuul-gateway
    depends_on:
      - rabbitmq
      - config-server
      - eureka-server
    environment:
      RABBIT_MQ_HOST: "rabbitmq"
      RABBIT_MQ_PORT: "5672"
      RABBIT_MQ_URSER_NAME: "admin"
      RABBIT_MQ_URSER_PASSWORD: "admin"
      CONFIG_HOST: "config-server"
      CONFIG_PORT: "8888"
      EUREKA_HOST: "eureka-server"
      EUREKA_PORT: "8761"
    ports:
      - "8765:8765"

  user-service:
    build:
      context: user-service
      dockerfile: Dockerfile
    container_name: user-service
    depends_on:
      - rabbitmq
      - config-server
      - eureka-server
    environment:
      SPRING_PROFILES_ACTIVE: "development"
      RABBIT_MQ_HOST: "rabbitmq"
      RABBIT_MQ_PORT: "5672"
      RABBIT_MQ_URSER_NAME: "admin"
      RABBIT_MQ_URSER_PASSWORD: "admin"
      CONFIG_HOST: "config-server"
      CONFIG_PORT: "8888"
      EUREKA_HOST: "eureka-server"
      EUREKA_PORT: "8761"
    ports:
      - "8000:8000"

  user-service-2:
    build:
      context: user-service
      dockerfile: Dockerfile
    container_name: user-service-2
    depends_on:
      - rabbitmq
      - config-server
      - eureka-server
    environment:
      SPRING_PROFILES_ACTIVE: "development"
      RABBIT_MQ_HOST: "rabbitmq"
      RABBIT_MQ_PORT: "5672"
      RABBIT_MQ_URSER_NAME: "admin"
      RABBIT_MQ_URSER_PASSWORD: "admin"
      CONFIG_HOST: "config-server"
      CONFIG_PORT: "8888"
      EUREKA_HOST: "eureka-server"
      EUREKA_PORT: "8761"
    ports:
      - "8001:8000"

  user-service-3:
    build:
      context: user-service
      dockerfile: Dockerfile
    container_name: user-service-3
    depends_on:
      - rabbitmq
      - config-server
      - eureka-server
    environment:
      SPRING_PROFILES_ACTIVE: "development"
      RABBIT_MQ_HOST: "rabbitmq"
      RABBIT_MQ_PORT: "5672"
      RABBIT_MQ_URSER_NAME: "admin"
      RABBIT_MQ_URSER_PASSWORD: "admin"
      CONFIG_HOST: "config-server"
      CONFIG_PORT: "8888"
      EUREKA_HOST: "eureka-server"
      EUREKA_PORT: "8761"
    ports:
      - "8002:8000"

當我所有的服務都啟動時,起初一切似乎都很好。 所有服務都在 eureka 注冊,所有服務都可以在本地主機上調用,並且它們可以相互通信。 但是配置刷新不起作用。

當我更改配置存儲庫中的某些內容並提交並推送它時,它對我的​​服務沒有影響。 他們的配置保持不變。 當我在配置服務器上手動調用總線刷新時:

http://localhost:8888/bus/refresh

使用POST ,就像到目前為止我能找到的幾乎所有指南中所描述的那樣,我得到了回應:

{
    "timestamp": "2020-03-30T09:33:57.818+0000",
    "status": 405,
    "error": "Method Not Allowed",
    "message": "Request method 'POST' not supported",
    "path": "/bus/refresh"
}

當我改用GET ,我得到:

{
    "name": "bus",
    "profiles": [
        "refresh"
    ],
    "label": null,
    "version": "03759e798f3516da6a18fc8b61a265d37ddeff4e",
    "state": null,
    "propertySources": []
}

它也對我的服務配置沒有影響。 當我在我的任何服務上調用總線刷新時,我得到:

{
    "timestamp": "2020-03-30T09:35:39.643+0000",
    "status": 404,
    "error": "Not Found",
    "message": "No message available",
    "path": "/bus/refresh"
}

我需要做什么才能使自動配置刷新工作?

手動調用服務上的/actuator/refresh端點是有效的。 然后他們正在拉取新配置。 所以看起來兔子 mq 根本不起作用。

我找到了解決方案。 實際上我的設置和配置文件完全沒問題,我只是調用了錯誤的端點。 而不是調用:

http://localhost:8888/bus/refresh

我必須打電話:

http://localhost:8888/actuator/bus-refresh

這適用於我啟動的任何服務。 它會自動向rabbitmq 發送一條消息,然后將刷新發布給所有消費者。 然后所有配置都會更新。

雖然我仍然不知道為什么bus/refresh不起作用。 它用於許多示例/教程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM