Микросервис не может связаться с сервисом конфигурации в docker-compose - PullRequest
1 голос
/ 07 июня 2019

В настоящее время у меня есть два микросервиса:
- service - порт 8080, этот микросервис пытается получить конфигурацию из другого микросервиса.
- config - порт 8888,Предполагается, что этот микросервис обеспечивает конфигурацию.

По какой-то причине мой сервис не может получить конфигурацию из конфигурационного микросервиса.
Мой конфигурационный микросервис должен работать, потому что я могу свернуть localhost: 8888 / service / default на моем компьютереЯ получаю:

{"name":"service","profiles":["default"],"label":null,"version":null,"state":null,"propertySources":[{"name":"classpath:/shared/service.yml","source":{"server.port":8080,"spring.security.user.password":"admin"}},{"name":"classpath:/shared/service.yaml","source":{"server.port":8080,"spring.security.user.password":"admin"}}]}

Получена ошибка (полная)

service | 2019-06-06 21:31:06.721  INFO 1 --- [main] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://config:8888   
service | 2019-06-06 21:31:06.894  INFO 1 --- [main] c.c.c.ConfigServicePropertySourceLocator : Connect Timeout Exception on Url - http://config:8888. Will be trying the next url if available   
service | 2019-06-06 21:31:06.904 ERROR 1 --- [main] o.s.boot.SpringApplication               : Application run failed

Docker-compose.yaml

version: '3.7'
services:
  config:
    container_name: config
    build: ./config
    ports:
      - 8888:8888

  service:
    container_name: service
    build: ./service
    ports:
      - 8080:8080
    depends_on:
      - config

Сервисный файл Docker:

FROM openjdk:8-jdk-alpine
ADD target/service.jar /app.jar
CMD [ "java", "-Xmx200m", "-jar", "/app.jar" ]
EXPOSE 8080

Service bootstrap.yaml

spring:
  application:
    name: service
  cloud:
    config:
      uri: http://config:8888
      fail-fast: true

service.yaml (имеет конфигурацию службы)

server:
  port: 8080

spring:
  security:
    user:
      password: admin # doesnt set since no connection

Config Dockerfile

FROM openjdk:8-jdk-alpine
ADD target/config.jar /app.jar
CMD [ "java", "-Xmx200m", "-jar", "/app.jar" ]
EXPOSE 8888

Configapplication.yaml

spring:
  application:
    name: config
  profiles:
    active: composite
  cloud:
    config:
      server:
        composite:
          - type: native
            search-locations: classpath:/shared

server:
  port: 8888

shared / service.yaml (имеет конфигурацию службы)

server:
  port: 8080

spring:
  security:
    user:
      password: admin # doesnt set since no connection

Есть идеи?

Я обнаружил некоторые похожие проблемы, хотя они имели толькопроблемы с их URI, мой установлен правильно. Микросервис не может связаться с сервером конфигурации на Docker Compose
Docker - SpringConfig - Соединение отказано в ConfigServer

1 Ответ

1 голос
/ 07 июня 2019

Когда одна служба зависит от другой, перед подключением к ней необходимо убедиться, что последняя полностью запущена.

В вашем случае, скорее всего, config запущен, но не готов (контекст запущен) во время выполнения service. Как отметили @Ganesh Karewad и @asolanki, решение состоит в том, чтобы реализовать логику переподключения. Другое решение состоит в том, чтобы убедиться, что config инициализирован и принимает подключения перед запуском service.

Этого можно добиться с помощью сценария, который ожидает, пока не откроется приложение config. В качестве альтернативы вы можете настроить контейнер config с помощью команды проверка работоспособности , и после запуска дождитесь, пока он не будет помечен как исправный. Затем вы можете запустить сервисный контейнер.

Подобный вопрос обсуждался здесь и здесь

Надеюсь, это поможет.

...