Spring Cloud Config Server выдает исключение времени ожидания подключения для URL-адреса - http://localhost: 8888 при развертывании на докерах - PullRequest
1 голос
/ 08 июля 2020

Я пытаюсь перенести свои микросервисы с весенней загрузкой на докеры. Мои микросервисы работают абсолютно нормально, когда они реализованы на STS в локальной системе. Но когда я закрепляю их, я получаю ошибку тайм-аута подключения.

Я делюсь своими фрагментами кода ниже:

Docker -compose:

version: '3.6'
services:
  db:
    image: 'mysql:8.0.18'
    container_name: mysqldb
    ports:
      - '3300:3300'
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_USER=root
    networks:
      - truyum-nw
      - movie-cruiser-nw
    volumes:
      - './mysqldb:/var/lib/mysql'
      - './dbscripts:/docker-entrypoint-initdb.d'
  config-server:
    image: spring-cloud-config-server
    build: ./spring-cloud-config-server
    container_name: spring-cloud-config-server
    ports:
      - '8888:8888'
    networks:
      - truyum-nw
      - movie-cruiser-nw
  eureka:
    image: eureka-discovery-service
    build: ./eureka-discovery-service
    container_name: eureka-discovery
    ports:
      - '8761:8761'
    depends_on:
      - config-server
      - db
    networks:
      - truyum-nw
      - movie-cruiser-nw
  zuul:
    image: zuul-service
    build: ./zuul-gateway
    container_name: zuul-bridge
    ports:
      - '8762:8762'
    depends_on:
      - eureka
      - config-server
    networks:
      - truyum-nw
      - movie-cruiser-nw
  auth-service:
    image: auth-service
    build: ./Authentication-service
    container_name: auth-service
    ports:
      - '9100:9100'
    depends_on:
      - eureka
      - config-server
    networks:
      - truyum-nw
      - movie-cruiser-nw
  menu-item-service:
    image: menu-item-service
    build: ./menuitem-service
    container_name: menu-item-service
    ports:
      - '34000:34000'
    depends_on:
      - eureka
      - config-server
      - zuul
      - db
      - auth-service
    networks:
      - truyum-nw
  cart-service:
    image: cart-service
    build: ./cart-service
    container_name: cart-service
    ports:
      - '34001:34001'
    depends_on:
      - eureka
      - config-server
      - zuul
      - db
      - menu-item-service
      - auth-service
    networks:
      - truyum-nw
  movie-service:
    image: movie-service
    build: ./movie-service
    container_name: movie-service
    ports:
      - '35000:35000'
    depends_on:
      - eureka
      - config-server
      - db
      - zuul
      - auth-service
    networks:
      - movie-cruiser-nw
  favourite-service:
    image: favourite-service
    build: ./favorite-service
    container_name: favourite-service
    ports:
      - '35001:35001'
    depends_on:
      - eureka
      - config-server
      - db
      - zuul
      - auth-service
      - movie-service
    networks:
      - movie-cruiser-nw
networks:
  truyum-nw:
    name: truyum-nw
    driver: bridge
  movie-cruiser-nw:
    name: movie-cruiser-nw
    driver: bridge

application.properties из spring-cloud-config-server :

spring.cloud.config.server.git.uri = https://github.com/satyamthedeveloper/Stage4_Week2_841418_SatyamKumar
server.port=8888

application.properties из Eureka -Discovery-Server :

spring.application.name=discoveryservice
spring.cloud.config.uri = http://spring-cloud-config-server:8888

 

Когда я делаю docker-compose up и проверяю http://localhost:8888/discoveryservice/default, я получаю результат как

{
    "name": "discoveryservice",
    "profiles": [
        "default"
    ],
    "label": null,
    "version": "8450532e432fb103ef30d0002fa254b23d2158d6",
    "state": null,
    "propertySources": [
        {
            "name": "https://github.com/satyamthedeveloper/Stage4_Week2_841418_SatyamKumar/discoveryservice.properties",
            "source": {
                "server.port": "8761",
                "eureka.client.register-with-eureka": "false",
                "eureka.client.fetch-registry": "false",
                "info.app.name": "Spring Eureka Server Application"
            }
        },
        {
            "name": "https://github.com/satyamthedeveloper/Stage4_Week2_841418_SatyamKumar/application.yml",
            "source": {
                "eureka.client.service-url.defaultZone": "http://eureka-discovery:8761/eureka",
                "logging.level.org.springframework.web": "DEBUG",
                "management.endpoints.web.exposure.include": "*"
            }
        }
    ]
}

Но все же мой Eureka discovery service запускается на 8080, который недоступен, поскольку я его не выставлял. Я пробовал несколько из этих шагов, которые не помогли.

  1. попытался остановить и перезапустить службу обнаружения, когда моя облачная конфигурация будет готова.
  2. попробовал это отдельно без docker -составить, создав сеть, но это не сработало.

Я не уверен, почему мои службы не могут получить ссылку, которую я могу легко получить с помощью URL.

Это скриншот моего журнала, который я получаю каждый раз, что бы я ни пытался.

Ответы [ 2 ]

0 голосов
/ 10 июля 2020

Потратив на это два дня, я решил эту проблему следующим образом:

Я сместил свойства, которые я определял в application.properties, на bootstrap.yml. Изменения следующие.

bootstrap .yml из spring-cloud-config-server :

spring:
    application:
        name: config-server
    cloud:
        config:
            server:
                git:
                    uri: https://github.com/satyamthedeveloper/Stage4_Week2_841418_SatyamKumar
                    clone-on-start: true

bootstrap .yml из Eureka-Discovery-Server :

spring:
    application:
        name: discoveryservice
    cloud:
        config:
            fail-fast: true
            retry:
                maxAttempts: 200
                maxInterval: 10000 
            uri: http://spring-cloud-config-server:8888

Причина такой ошибки стала понятна после того, как мы узнали разницу между bootstrap.yml и application.properties:

Использование application.properties: :

Мы используем application.yml или application.properties для настройки контекста приложения.

Когда приложение Spring Boot запускается, оно создает контекст приложения, который не нужно явно настраивать - он уже настроен автоматически. Однако Spring Boot предлагает разные способы переопределения этих свойств.

И использование bootstrap .yml равно :

Мы используем bootstrap .yml или bootstrap .properties для настройки контекста bootstrap. Таким образом, мы сохраняем внешнюю конфигурацию для bootstrap и основного контекста четко разделенными.

Контекст bootstrap отвечает за загрузку свойств конфигурации из внешних источников и за расшифровку свойств в локальных внешних файлах конфигурации.

Когда приложение Spring Cloud запускается, оно создает контекст bootstrap. Первое, что нужно запомнить, это то, что контекст bootstrap является родительским контекстом для основного приложения.

Еще один ключевой момент, который следует помнить, это то, что эти два контекста совместно используют Environment, который является источником внешних свойств для любых Приложение Spring. В отличие от контекста приложения, контекст bootstrap использует другое соглашение для определения местоположения внешней конфигурации.

Вы можете обратиться к следующему блогу для получения более подробной c информации: Разница между Application.properties и Bootstrap .yml с примером

0 голосов
/ 09 июля 2020

Имя, на которое вы должны ссылаться в конфигурации eureka для сервера конфигурации, - это только config-server, поскольку это имя службы в вашем yaml-файле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...