У меня есть два пружинных микросервиса: сервис заказов и сервис платежей. Оба они подключены к серверу 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 , он должен переслать запрос в любую службу заказа экземпляры.
Спасибо!