【问题标题】:Docker / docker-compose / nginx / springboot码头工人 / 码头工人撰写 / nginx / springboot
【发布时间】:2020-04-18 19:26:14
【问题描述】:

我有两个 spring-boot 微服务,订单服务和支付服务。它们都连接到 Eureka 服务器。 order-service 使用 feign 调用 payment-service。

活动 1

我使用 maven spotify 插件来创建 docker 映像和 docker-compose 文件来创建网络并使所有服务启动并运行。这一切都很完美。

活动 2

现在我需要扩展服务。于是我把docker-compose文件中的host端口去掉了,然后运行命令如下:

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 

您可以看到服务正在主机系统的可用端口中运行。现在我需要添加一个负载均衡器,这样我就不必担心运行服务的端口了。

我关注here的帖子并添加了nginx配置

第一步:添加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,它应该将请求转发到任何订单服务实例。

谢谢!

【问题讨论】:

    标签: docker nginx docker-compose nginx-config


    【解决方案1】:

    我意识到我只需要一个 API 网关,eureka 将管理它应该将请求路由到哪个实例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-14
      • 2020-09-08
      • 2019-07-22
      • 1970-01-01
      • 2019-02-13
      • 2018-11-29
      • 2018-03-29
      相关资源
      最近更新 更多