Netflix-zuul не может маршрутизировать api микросервиса весенней загрузки в докер - PullRequest
0 голосов
/ 22 апреля 2019

Я получаю " Произошла непредвиденная ошибка (тип = Внутренняя ошибка сервера, статус = 500) ОБЩАЯ " ошибка, когда я внедряю службу zuul-gateway-service в докер-контейнер и проверяю ее. Но в Windows, когда я запускаю приложения в Eclipse, все работает просто отлично, я могу обращаться к сервисам через порт шлюза zuul, и я также могу использовать каждое отображение с почтальоном через шлюз. Но это не работает в док-контейнерах.

ZuulGatewayServerApplication.java;

@EnableEurekaClient
@EnableZuulProxy
@SpringBootApplication
@EnableDiscoveryClient
public class ZuulGatewayServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ZuulGatewayServerApplication.class, args);
    }
}

файл application.properties для zuul-gateway-service;

server.port=8762
spring.application.name=t-zuul-server
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka

zuul.ignored-services=*

zuul.routes.t-author-bookstore.path=/author/**
zuul.routes.t-author-bookstore.service-ıd=t-author-bookstore
#zuul.routes.t-author-bookstore.strip-prefix=false

zuul.routes.t-book-bookstore.path=/book/**
zuul.routes.t-book-bookstore.service-ıd=t-book-bookstore
#zuul.routes.t-book-bookstore.strip-prefix=false
#... there is also 4 more services

Я также пытался добавить эти коды в файл application.properties для zuul-gateway-service;

eureka.client.registerWithEureka = true
eureka.client.register-with-eureka=true
ribbon.eureka.enabled=true
zuul.routes.${service_name}.strip-prefix=false

В docker, для zuul-gateway-service, мой Dockerfile выглядит так

FROM openjdk:8-alpine
VOLUME /tmp
COPY t-zuul-gateway-server-1.0.jar t-zuul-app.jar
EXPOSE 8762
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/t-zuul-app.jar"]

Вот так я запускаю образы докеров

docker run -d --network=bookstore-mongodb -p 8761:8761 --name t-eureka-server t-eureka-server-1.0
docker run -d --network=bookstore-mongodb -p 8762:8762 --name t-zuul-servicee --link=mongo --rm -e EUREKA_CLIENT_SERVICEURL_DEFAULTZONE=http://localhost:8761/eureka t-zuul-gateway-server-1.0
docker run -d --network=bookstore-mongodb -p 8052:8052 --name t-book-bookstore --link=mongo --rm -e EUREKA_CLIENT_SERVICEURL_DEFAULTZONE=http://localhost:8761/eureka t-book-bookstore-1.0

Порт 8052 работает как положено.

Вот так выглядит мой процесс в Docker-контейнере (Docker PS): здесь

Я также пытался связать zuul-gateway-service с другими контейнерами --link. Но это не сработало.

Те же коды работают нормально в окнах, но не в док-контейнерах. Я ожидаю соединить шлюз со службами в докер-контейнерах. Спасибо за любые хиты.

Ответы [ 2 ]

0 голосов
/ 25 апреля 2019

Все коды написанные в посте и другие верны, кроме этого кода;

zuul.routes.xyz.service-ıd=xyz

Так и должно быть;

zuul.routes.xyz.serviceId=xyz

А также этот идентификатор службы должен совпадать со значением spring.application.name для каждой службы.

На самом деле я не знаю, почему Eclipse предлагает это , но правильный код - то, что я упомянул как второй.

0 голосов
/ 24 апреля 2019

Я не уверен на 100%, но я думаю, что это из-за вашего Zuul не может подключиться к Eureka.Я полагаю, причина в том, что вы используете localhost в качестве адреса для Eureka, но localhost также определен в контейнере и указывает на себя вместо вашего хост-компьютера.

Вы пробовали использовать docker-compose?В вашем файле compose вы можете сделать что-то вроде:

version: '3.3'
services:
    eureka:
        image: t-eureka-server-1.0
        ports:
            - "8761:8761"

    zuul:
        image: t-zuul-gateway-server-1.0
        ports:
            - "8762:8762"
        depends_on:
            - "eureka"
        links:
            - "eureka:eureka"

    bookstore:
        image: t-book-bookstore-1.0
        ports:
            - "8052:8052"
        links:
            - "eureka:eureka"

Конечно, вам нужно добавить базу данных mongo, чтобы она заработала, но вы можете проверить, может ли Zuul подключиться к Eureka.

...