Docker / docker -compose / nginx / springboot - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть два пружинных микросервиса: сервис заказов и сервис платежей. Оба они подключены к серверу Eureka. order-service звонит в payment-service с помощью feign.

Activity 1

Я использовал плагин maven spotify для создания изображения docker и docker -создать файл для создания сети и запуска всех служб. Это все идеально.

Упражнение 2

Теперь мне нужно масштабировать услуги. Поэтому я удалил порт хоста в файле docker -compose и затем выполнил команду следующим образом:

docker-compose up -d --scale order-service=2 --scale payment-service=2

Это создало 2 экземпляра служб и подключило их к серверу eureka.

docker-compose ps

Приведенная выше команда выдала следующий вывод

service-registry_order-service_1      sh -c java $JAVA_OPTS -Dja ...   Up       0.0.0.0:32776->8181/tcp, 8182/tcp
    service-registry_order-service_2      sh -c java $JAVA_OPTS -Dja ...   Up       0.0.0.0:32777->8181/tcp, 8182/tcp
    service-registry_payment-service_1    sh -c java $JAVA_OPTS -Dja ...   Up       8181/tcp, 0.0.0.0:32774->8182/tcp
    service-registry_payment-service_2    sh -c java $JAVA_OPTS -Dja ...   Up       8181/tcp, 0.0.0.0:32775->8182/tcp
    service-registry_service-registry_1   sh -c java $JAVA_OPTS -Dja ...   Up       0.0.0.0:8761->8761/tcp 

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

Я проследовал за постом здесь и добавил nginx конфигурация

Шаг 1: добавлен файл nginx .conf следующим образом: -

user  nginx;

events {
    worker_connections   1000;
}
http {
        server {
              listen 4000;
              location / {
                proxy_pass http://order-service:8181;
              }
        }
}

Шаг 2: Я изменил docker -композитный файл, добавив nginx детали , Окончательный файл выглядит следующим образом:

version: '3.7'

networks:
  order-payment:

services:
  service-registry:
    image: shefzee/service-registry:0.0.1-SNAPSHOT
    ports:
      - "8761:8761"
    restart: always
    networks:
      - order-payment

  order-service:
    image: shefzee/order-service:0.0.1-SNAPSHOT
    ports:
      #- "8181:8181"
      - "8181"
    restart: always
    depends_on:
      - service-registry
      - payment-service
    networks:
      - order-payment


  payment-service:
      image: shefzee/payment-service:0.0.1-SNAPSHOT
      ports:
        #- "8182:8182"
        - "8182"
      restart: always
      depends_on:
        - service-registry
      networks:
        - order-payment

  nginx:
      image: nginx:latest
      volumes:
        - ./nginx.conf:/etc/nginx/nginx.conf:ro
      depends_on:
        - order-service
      ports:
        - "4000:4000"

Теперь запустил docker -compose

docker-compose up -d --scale order-service=2 --scale payment-service=2

и перечислил контейнеры ..

               Name                              Command               State                  Ports              
-----------------------------------------------------------------------------------------------------------------
service-registry_nginx_1              nginx -g daemon off;             Exit 1                                    
service-registry_order-service_1      sh -c java $JAVA_OPTS -Dja ...   Up       0.0.0.0:32776->8181/tcp, 8182/tcp
service-registry_order-service_2      sh -c java $JAVA_OPTS -Dja ...   Up       0.0.0.0:32777->8181/tcp, 8182/tcp
service-registry_payment-service_1    sh -c java $JAVA_OPTS -Dja ...   Up       8181/tcp, 0.0.0.0:32774->8182/tcp
service-registry_payment-service_2    sh -c java $JAVA_OPTS -Dja ...   Up       8181/tcp, 0.0.0.0:32775->8182/tcp
service-registry_service-registry_1   sh -c java $JAVA_OPTS -Dja ...   Up       0.0.0.0:8761->8761/tcp      

Если вы видите, nginx не работает. Я не могу понять проблему здесь. Пожалуйста, помогите.

Что мне нужно, если я это сделаю, http://localhost: 4000 / uri , он должен переслать запрос в любую службу заказа экземпляры.

Спасибо!

1 Ответ

0 голосов
/ 19 апреля 2020

Я понял, что мне просто нужен API-шлюз, и eureka будет управлять, к какому экземпляру следует направить запрос.

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