[英]Docker / docker-compose / nginx / springboot
我有兩個 spring-boot 微服務,訂單服務和支付服務。 它們都連接到 Eureka 服務器。 order-service 使用 feign 調用 payment-service。
活動一
我使用 maven spotify 插件來創建 docker 圖像和 docker-compose 文件來創建網絡並使所有服務啟動並運行。 這一切都很完美。
活動二
現在我需要擴展服務。 於是我把docker-compose文件中的主機端口去掉,然后運行命令如下:
docker-compose up -d --scale order-service=2 --scale payment-service=2
這創建了 2 個服務實例並將它們附加到 eureka 服務器。
docker-compose ps
上面的命令給出了以下 output
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-compose 文件以添加 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 ,它應該將請求轉發到任何訂單服務實例。
謝謝 !
我意識到我只需要一個 API 網關,eureka 將管理它應該將請求路由到哪個實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.