springboot中使用网关和微服务进行端口映射

发布于 2025-01-16 07:30:00 字数 5079 浏览 3 评论 0原文

也许我不太了解使用 docker-compose 和非常简单的网关进行端口映射。除了网关之外,所有项目都运行良好。

我的 application.yml 如下:

spring:
  application:
    name: api-gateway

  cloud:
    gateway:
      routes:
        - id: usermanager
          uri: http://usermanager:1111
          predicates:
            - Path=/user/
        - id: catalogmanager
          uri: http://catalogmanager:2222
          predicates:
            - Path=/catalog/
        - id: paymanager
          uri: http://paymanager:3333
          predicates:
            - Path=/payment/**

而 docker-compose 是:

version: '3.4'

x-common-variables: &common-variables
  DATASOURCE_USER: ${DB_USER}
  DATASOURCE_PASSWORD: ${DB_PASSWORD}
  DATASOURCE_PORT: ${DB_PORT}

services:
  apigateway:
    image: api-gateway
    ports:
      - "8080:8080"

  paymysqldb:
    container_name: paymysqldb
    image: mysql
    ports:
      - "3313:3306"
    environment:
      - MYSQL_DATABASE=${DB_DATABASE_PAY}
      - MYSQL_USER=${DB_USER}
      - MYSQL_PASSWORD=${DB_PASSWORD}
      - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
    volumes:
      - paystorage:/var/lib/mysql


  usermysqldb:
    container_name: usermysqldb
    image: mysql
    ports:
      - "3311:3306"
    environment:
      - MYSQL_DATABASE=${DB_DATABASE_USER}
      - MYSQL_USER=${DB_USER}
      - MYSQL_PASSWORD=${DB_PASSWORD}
      - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
    volumes:
      - userstorage:/var/lib/mysql

  catalogmysqldb:
    container_name: catalogmysqldb
    image: mysql
    ports:
      - "3312:3306"
    environment:
      - MYSQL_DATABASE=${DB_DATABASE_CATALOG}
      - MYSQL_USER=${DB_USER}
      - MYSQL_PASSWORD=${DB_PASSWORD}
      - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
    volumes:
      - catalogstorage:/var/lib/mysql

  paymanager:
    container_name: paymanager
    image: arausa/payimage
    build:
      context: .
      dockerfile: MicroServices/PaymentManager/Dockerfile
    depends_on:
      - paymysqldb
    ports:
      - "3333:3333"
    restart: always
    environment:
      <<: *common-variables
      PM_DATASOURCE_HOST: ${DB_HOST_PAY}
      PM_DATASOURCE_NAME: ${DB_DATABASE_PAY}

  usermanager:
    container_name: usermanager
    image: arausa/userimage
    build:
      context: .
      dockerfile: MicroServices/UserManager/Dockerfile
    depends_on:
      - usermysqldb
    ports:
      - "1111:1111"
    restart: always
    environment:
      <<: *common-variables
      UM_DATASOURCE_HOST: ${DB_HOST_USER}
      UM_DATASOURCE_NAME: ${DB_DATABASE_USER}

  catalogmanager:
    container_name: catalogmanager
    image: arausa/catalogimage
    build:
      context: .
      dockerfile: MicroServices/CatalogManager/Dockerfile
    depends_on:
      - catalogmysqldb
    ports:
      - "2222:2222"
    restart: always
    environment:
      <<: *common-variables
      CM_DATASOURCE_HOST: ${DB_HOST_CATALOG}
      CM_DATASOURCE_NAME: ${DB_DATABASE_CATALOG}



#kafka usa zookeeper tiene traccia dei broker, topologia della network e info per la sincronizzazione
  zookeeper:
    image: wurstmeister/zookeeper

#identifica il broker kafka
  kafka:
    image: wurstmeister/kafka
    ports:
      - "9092:9092"  #porta di default per il broker kafka
    environment:
      KAFKA_ADVERTISED_HOST_NAME: kafka
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181  #serve a dire dove sta girando zookeeper


volumes:
  userstorage:
  catalogstorage:
  paystorage:

调用时返回的错误,例如:http://localhost:8080/user/getAllUser 如下:

ERROR 1 --- [or-http-epoll-3] a.w.r.e.AbstractErrorWebExceptionHandler : [4b1c3833-1]  500 Server Error for HTTP GET "/user/getAllUsers"
apigateway_1      | 
apigateway_1      | io.netty.channel.AbstractChannel$AnnotatedConnectException: finishConnect(..) failed: Connection refused: usermanager/172.24.0.9:1111
apigateway_1      |     Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
apigateway_1      | Error has been observed at the following site(s):
apigateway_1      |     *__checkpoint ⇢ org.springframework.cloud.gateway.filter.WeightCalculatorWebFilter [DefaultWebFilterChain]
apigateway_1      |     *__checkpoint ⇢ HTTP GET "/user/getAllUsers" [ExceptionHandlingWebHandler]
apigateway_1      | Original Stack Trace:
apigateway_1      | Caused by: java.net.ConnectException: finishConnect(..) failed: Connection refused
apigateway_1      |     at io.netty.channel.unix.Errors.newConnectException0(Errors.java:155) ~[netty-transport-native-unix-common-4.1.74.Final.jar!/:4.1.74.Final]
apigateway_1      |     at io.netty.channel.unix.Errors.handleConnectErrno(Errors.java:128) ~[netty-transport-native-unix-common-4.1.74.Final.jar!/:4.1.74.Final]
apigateway_1      |     at io.netty.channel.unix.Socket.finishConnect(Socket.java:320) ~[netty-transport-native-unix-common-4.1.74.Final.jar!/:4.1.74.Final]```


I'm trying to create a simple gateway that the request made on localhost/8080 route through the different microservices. Can someone explain me if something is wrong configured?

Maybe I do not understand well the mapping of the port using docker-compose and a very simple gateway. All the project is working fine except for the gateway.

My application.yml is the following:

spring:
  application:
    name: api-gateway

  cloud:
    gateway:
      routes:
        - id: usermanager
          uri: http://usermanager:1111
          predicates:
            - Path=/user/
        - id: catalogmanager
          uri: http://catalogmanager:2222
          predicates:
            - Path=/catalog/
        - id: paymanager
          uri: http://paymanager:3333
          predicates:
            - Path=/payment/**

While the docker-compose is:

version: '3.4'

x-common-variables: &common-variables
  DATASOURCE_USER: ${DB_USER}
  DATASOURCE_PASSWORD: ${DB_PASSWORD}
  DATASOURCE_PORT: ${DB_PORT}

services:
  apigateway:
    image: api-gateway
    ports:
      - "8080:8080"

  paymysqldb:
    container_name: paymysqldb
    image: mysql
    ports:
      - "3313:3306"
    environment:
      - MYSQL_DATABASE=${DB_DATABASE_PAY}
      - MYSQL_USER=${DB_USER}
      - MYSQL_PASSWORD=${DB_PASSWORD}
      - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
    volumes:
      - paystorage:/var/lib/mysql


  usermysqldb:
    container_name: usermysqldb
    image: mysql
    ports:
      - "3311:3306"
    environment:
      - MYSQL_DATABASE=${DB_DATABASE_USER}
      - MYSQL_USER=${DB_USER}
      - MYSQL_PASSWORD=${DB_PASSWORD}
      - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
    volumes:
      - userstorage:/var/lib/mysql

  catalogmysqldb:
    container_name: catalogmysqldb
    image: mysql
    ports:
      - "3312:3306"
    environment:
      - MYSQL_DATABASE=${DB_DATABASE_CATALOG}
      - MYSQL_USER=${DB_USER}
      - MYSQL_PASSWORD=${DB_PASSWORD}
      - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
    volumes:
      - catalogstorage:/var/lib/mysql

  paymanager:
    container_name: paymanager
    image: arausa/payimage
    build:
      context: .
      dockerfile: MicroServices/PaymentManager/Dockerfile
    depends_on:
      - paymysqldb
    ports:
      - "3333:3333"
    restart: always
    environment:
      <<: *common-variables
      PM_DATASOURCE_HOST: ${DB_HOST_PAY}
      PM_DATASOURCE_NAME: ${DB_DATABASE_PAY}

  usermanager:
    container_name: usermanager
    image: arausa/userimage
    build:
      context: .
      dockerfile: MicroServices/UserManager/Dockerfile
    depends_on:
      - usermysqldb
    ports:
      - "1111:1111"
    restart: always
    environment:
      <<: *common-variables
      UM_DATASOURCE_HOST: ${DB_HOST_USER}
      UM_DATASOURCE_NAME: ${DB_DATABASE_USER}

  catalogmanager:
    container_name: catalogmanager
    image: arausa/catalogimage
    build:
      context: .
      dockerfile: MicroServices/CatalogManager/Dockerfile
    depends_on:
      - catalogmysqldb
    ports:
      - "2222:2222"
    restart: always
    environment:
      <<: *common-variables
      CM_DATASOURCE_HOST: ${DB_HOST_CATALOG}
      CM_DATASOURCE_NAME: ${DB_DATABASE_CATALOG}



#kafka usa zookeeper tiene traccia dei broker, topologia della network e info per la sincronizzazione
  zookeeper:
    image: wurstmeister/zookeeper

#identifica il broker kafka
  kafka:
    image: wurstmeister/kafka
    ports:
      - "9092:9092"  #porta di default per il broker kafka
    environment:
      KAFKA_ADVERTISED_HOST_NAME: kafka
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181  #serve a dire dove sta girando zookeeper


volumes:
  userstorage:
  catalogstorage:
  paystorage:

The returned error on a call like: http://localhost:8080/user/getAllUser
is the following:

ERROR 1 --- [or-http-epoll-3] a.w.r.e.AbstractErrorWebExceptionHandler : [4b1c3833-1]  500 Server Error for HTTP GET "/user/getAllUsers"
apigateway_1      | 
apigateway_1      | io.netty.channel.AbstractChannel$AnnotatedConnectException: finishConnect(..) failed: Connection refused: usermanager/172.24.0.9:1111
apigateway_1      |     Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
apigateway_1      | Error has been observed at the following site(s):
apigateway_1      |     *__checkpoint ⇢ org.springframework.cloud.gateway.filter.WeightCalculatorWebFilter [DefaultWebFilterChain]
apigateway_1      |     *__checkpoint ⇢ HTTP GET "/user/getAllUsers" [ExceptionHandlingWebHandler]
apigateway_1      | Original Stack Trace:
apigateway_1      | Caused by: java.net.ConnectException: finishConnect(..) failed: Connection refused
apigateway_1      |     at io.netty.channel.unix.Errors.newConnectException0(Errors.java:155) ~[netty-transport-native-unix-common-4.1.74.Final.jar!/:4.1.74.Final]
apigateway_1      |     at io.netty.channel.unix.Errors.handleConnectErrno(Errors.java:128) ~[netty-transport-native-unix-common-4.1.74.Final.jar!/:4.1.74.Final]
apigateway_1      |     at io.netty.channel.unix.Socket.finishConnect(Socket.java:320) ~[netty-transport-native-unix-common-4.1.74.Final.jar!/:4.1.74.Final]```


I'm trying to create a simple gateway that the request made on localhost/8080 route through the different microservices. Can someone explain me if something is wrong configured?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文