簡體   English   中英

Docker / docker-compose / nginx / springboot

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM