feign.RetryableException:执行 GET 时连接被拒绝(连接被拒绝)

问题描述 投票:0回答:1

我正在开发核心银行解决方案。我有两个微服务,分别称为 account-cmd-service 和 customer-service。我一直在尝试使用 FeignClient 通过客户服务的 id 获取客户。开发环境没有问题,但是Docker端有问题。

我一直在尝试覆盖 docker-compose.yml 文件中的 spring.feign.customer.client 属性 http://客户服务:5000/。

如何联系客户服务?

    {
      "message": "Error while processing - feign.RetryableException: Connection refused (Connection refused) executing GET http://localhost:5000/api/v1/customer/get/1.",
      "id": "21d65b99-c85f-44ff-9763-ed82ff1c39cc"
    }

这是我用于获取客户的 ICustomerService。

    @Service
    @FeignClient(name = "customer-service", url = "${spring.feign.customer.client}")
    public interface ICustomerService {

        @GetMapping("/api/v1/customer/get/{customerId}")
        Object getCustomerById(@PathVariable Long customerId);
    }

这是 account-cmd-service 的 application.properties。

    server.port=5002

    #Mongo Config
    spring.data.mongodb.host=localhost
    spring.data.mongodb.port=27017
    spring.data.mongodb.database=accountcmdb

    # RabbitMQ Setup
    spring.rabbitmq.host=localhost
    spring.rabbitmq.port=5672
    spring.rabbitmq.username=guest
    spring.rabbitmq.password=guest

    feign.client.config.default.connectTimeout=160000000
    feign.client.config.default.readTimeout=160000000

    spring.feign.customer.client = http://localhost:5000/

这里是 docker-compose.yml 文件实现。

    version: "3.4"

    services:

      customerdb:
        container_name: customerdb
        image: postgres
        environment:
         POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
         POSTGRES_USER: ${POSTGRES_USER:-postgres}
        volumes:
          - ./customer/postgres_init.sql:/docker-entrypoint-initdb.d/postgres_init.sql
        ports:
          - "5432:5432"
        restart: unless-stopped

      querydb:
        container_name: querydb
        image: postgres
        environment:
          POSTGRES_USER: ${POSTGRES_USER:-postgres}
          POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
        volumes:
          - ./account.query/postgres_init.sql:/docker-entrypoint-initdb.d/postgres_init.sql
        ports:
          - "5433:5432"
        restart: unless-stopped

      rabbitmq:
        container_name: "bank_rabbitmq"
        image: "rabbitmq:3.8-management"
        hostname: "rabbitmq"
        environment:
          RABBITMQ_DEFAULT_USER: "guest"
          RABBITMQ_DEFAULT_PASS: "guest"
          RABBITMQ_DEFAULT_VHOST: "/"
        ports:
          - "15672:15672"
          - "5672:5672"

      cmddb:
        container_name: "cmddb"
        image: mongo
        restart: always
        ports:
            - "27017:27017"

      customer-service:
        image: bank/customer-service-api
        container_name: customer-service
        build:
          context: ./customer
          dockerfile: Dockerfile
        ports:
          - "5000:5000"
        depends_on:
          - customerdb
        environment:
          - SPRING_DATASOURCE_URL=jdbc:postgresql://customerdb:5432/customerdb
          - SPRING_DATASOURCE_USERNAME=postgres
          - SPRING_DATASOURCE_PASSWORD=postgres

      account-cmd:
        image: bank/account-cmd-service-api
        container_name: account-cmd-service
        build:
          context: ./account.cmd
          dockerfile: Dockerfile
        ports:
          - "5002:5002"
        depends_on:
          - cmddb
          - rabbitmq
        environment:
          - SPRING_DATA_MONGODB_HOST=cmddb
          - SPRING_DATA_MONGODB_PORT=27017
          - SPRING_DATA_MONGODB_DATABASE=accountcmdb
          - SPRING_RABBITMQ_HOST=rabbitmq
          - SPRING_RABBITMQ_PORT=5672
          - SPRING_RABBITMQ_USERNAME=guest
          - SPRING_RABBITMQ_PASSWORD=guest
          - SPRING_FEIGN_CUSTOMER_CLIENT=http://customer-service:5000/

      account-query:
        image: bank/account-query-service-api
        container_name: account-query-service
        build:
          context: ./account.query
          dockerfile: Dockerfile
        ports:
          - "5003:5003"
        depends_on:
          - querydb
          - rabbitmq
        environment:
          - SPRING_DATASOURCE_URL=jdbc:postgresql://querydb:5433/accountingdb
          - SPRING_DATASOURCE_USERNAME=postgres
          - SPRING_DATASOURCE_PASSWORD=postgres
          - SPRING_RABBITMQ_HOST=rabbitmq
          - SPRING_RABBITMQ_PORT=5672
          - SPRING_RABBITMQ_USERNAME=guest
          - SPRING_RABBITMQ_PASSWORD=guest

    volumes:
      customerdb:
      cmddb:
      querydb:
java spring-boot docker spring-cloud-feign
1个回答
0
投票

通过在 docker-compose 文件中将容器置于同一网络中已经解决了这个问题。

    version: "3.4"

    services:

      customerdb:
        container_name: customerdb
        image: postgres
        environment:
         POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
         POSTGRES_USER: ${POSTGRES_USER:-postgres}
        volumes:
          - ./customer/postgres_init.sql:/docker-entrypoint-initdb.d/postgres_init.sql
        ports:
          - "5432:5432"
        restart: unless-stopped
        networks:
          - host

      querydb:
        container_name: querydb
        image: postgres
        environment:
          POSTGRES_USER: ${POSTGRES_USER:-postgres}
          POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
        volumes:
          - ./account.query/postgres_init.sql:/docker-entrypoint-initdb.d/postgres_init.sql
        ports:
          - "5433:5432"
        restart: unless-stopped
        networks:
          - host

      rabbitmq:
        container_name: "bank_rabbitmq"
        image: "rabbitmq:3.8-management"
        hostname: "rabbitmq"
        environment:
          RABBITMQ_DEFAULT_USER: "guest"
          RABBITMQ_DEFAULT_PASS: "guest"
          RABBITMQ_DEFAULT_VHOST: "/"
        ports:
          - "15672:15672"
          - "5672:5672"
        networks:
          - host

      cmddb:
        container_name: "cmddb"
        image: mongo
        restart: always
        ports:
            - "27017:27017"
        networks:
          - host

      customer-service:
        image: bank/customer-service-api
        container_name: customer-service
        build:
          context: ./customer
          dockerfile: Dockerfile
        ports:
          - "5000:5000"
        depends_on:
          - customerdb
        environment:
          - SPRING_DATASOURCE_URL=jdbc:postgresql://customerdb:5432/customerdb
          - SPRING_DATASOURCE_USERNAME=postgres
          - SPRING_DATASOURCE_PASSWORD=postgres
        networks:
          - host

      account-cmd:
        image: bank/account-cmd-service-api
        container_name: account-cmd-service
        build:
          context: ./account.cmd
          dockerfile: Dockerfile
        ports:
          - "5002:5002"
        depends_on:
          - cmddb
          - rabbitmq
        environment:
          - SPRING_DATA_MONGODB_HOST=cmddb
          - SPRING_DATA_MONGODB_PORT=27017
          - SPRING_DATA_MONGODB_DATABASE=accountcmdb
          - SPRING_RABBITMQ_HOST=rabbitmq
          - SPRING_RABBITMQ_PORT=5672
          - SPRING_RABBITMQ_USERNAME=guest
          - SPRING_RABBITMQ_PASSWORD=guest
          - SPRING_FEIGN_CUSTOMER_CLIENT=http://customer-service:5000/
        networks:
          - host

      account-query:
        image: bank/account-query-service-api
        container_name: account-query-service
        build:
          context: ./account.query
          dockerfile: Dockerfile
        ports:
          - "5003:5003"
        depends_on:
          - querydb
          - rabbitmq
        environment:
          - SPRING_DATASOURCE_URL=jdbc:postgresql://querydb:5432/accountingdb
          - SPRING_DATASOURCE_USERNAME=postgres
          - SPRING_DATASOURCE_PASSWORD=postgres
          - SPRING_RABBITMQ_HOST=rabbitmq
          - SPRING_RABBITMQ_PORT=5672
          - SPRING_RABBITMQ_USERNAME=guest
          - SPRING_RABBITMQ_PASSWORD=guest
        networks:
          - host

      k6:
        container_name: k6_container
        image: loadimpact/k6:latest
        volumes:
          - ./load-testing:/scripts
        ports:
          - "6565:6565"
        networks:
          - host

    networks:
      host:
        driver: bridge

    volumes:
      customerdb:
      cmddb:
      querydb:
© www.soinside.com 2019 - 2024. All rights reserved.