You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署到AWS ECS的SpringBoot微服务同步通信问题排查

问题:AWS ECS上SpringBoot微服务Eureka失效后的通信解决方案

问题背景

我将SpringBoot微服务部署至AWS ECS后,Eureka Server无法正常运行,导致本地同一IP下不同端口可正常通信的微服务,在ECS环境中完全无法互相调用。

报错信息

Eureka心跳失败报错

2023-02-27T05:53:34.937Z ERROR [api-gateway,,]` 1 --- [tbeatExecutor-0] com.netflix.discovery.DiscoveryClient    : DiscoveryClient_API-GATEWAY/***:api-gateway:8080 - was unable to send heartbeat!

查阅AWS ECS文档后得知,ECS不支持第三方服务发现工具,但提供了内置服务发现功能。我尝试通过WebClient直接使用DNS+端口调用目标服务,依然失败,报错如下:

DNS调用失败报错

com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server
    at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:112) ~[eureka-client-2.0.0.jar:2.0.0]
    at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.sendHeartBeat(EurekaHttpClientDecorator.java:89) ~[eureka-client-2.0.0.jar:2.0.0]
    at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$3.execute(EurekaHttpClientDecorator.java:92) ~[eureka-client-2.0.0.jar:2.0.0]
    at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77) ~[eureka-client-2.0.0.jar:2.0.0]
    at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.sendHeartBeat(EurekaHttpClientDecorator.java:89) ~[eureka-client-2.0.0.jar:2.0.0]
    at com.netflix.discovery.DiscoveryClien

疑问

移除Eureka Client并改用AWS DNS+端口能否解决问题?或者还有哪些方法可以实现ECS环境下的微服务间通信?

相关代码与配置

WebClient代码

public Mono<user_info> finduser(String username){
        return webClientBuilder.baseUrl("http://"+dns).build().get()
                .uri(uriBuilder -> uriBuilder
                        .path("UserJob/get/Byusername/{username}")//"http://localhost:8082/Checkuser/{id}")
                        .build(username))
                .retrieve()
            .bodyToMono(user_info.class);
}

docker-compose.yml配置

version: '3'
services:
  zookeeper:
    image: confluentinc/cp-zookeeper:7.3.0
    container_name: zookeeper
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000

  broker:
    image: confluentinc/cp-kafka:7.3.0
    container_name: broker
    ports:
      - "9092:9092"
    depends_on:
      - zookeeper
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_INTERNAL:PLAINTEXT
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092,PLAINTEXT_INTERNAL://broker:29092
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
      KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1

#  dbmysql:
#    container_name: dbmysql
#    image: mysql:latest
#    restart: unless-stopped
#    environment:
#      MYSQL_ROOT_PASSWORD: "password"
#      MYSQL_USER: "admin"
#      MYSQL_DATABASE: freelance
#      MYSQL_PASSWORD: "password"
#
#    ports:
#      - "3307:3307"
#    volumes:
#      - /var/lib/docker/volumes/freelance_volume/_data
#
#  mongodb:
#    container_name: mongodb
#    image: mongo:latest
#    restart: unless-stopped
#    ports:
#      - "27017:27017"
#    volumes:
#      - /data/db

  zipkin:
    image: openzipkin/zipkin
    container_name: zipkin
    ports:
        - "9411:9411"

  eureka-server:
    image: alex0121/eureka-server:latest
    container_name: eureka-server
    depends_on:
      - zipkin
    build:
      context: eureka-server/.
      dockerfile: Dockerfile.layered
    ports:
      - "8761:8761"
    environment:
      - SPRING_PROFILES_ACTIVE=docker

  api-gateway:
    image: alex0121/api-gateway:latest
    build:
      context: api-gateway/.
      dockerfile: Dockerfile.layered
    ports:
      - "8080:8080"
    depends_on:
      - eureka-server
      - zipkin
    environment:
      - SPRING_PROFILES_ACTIVE=docker

  notification:
    image: alex0121/notification:latest
    build:
      context: notification/.
      dockerfile: Dockerfile.layered
    ports:
      - "8081:8081"
    depends_on:
      - eureka-server
      - broker
      - zipkin
    environment:
      - SPRING_PROFILES_ACTIVE=docker

  chatroom:
    image: alex0121/chatroom:latest
    build:
      context: chatroom/.
      dockerfile: Dockerfile.layered
    ports:
      - "8084:8084"
    depends_on:
      - eureka-server
      - zipkin
    environment:
        - SPRING_PROFILES_ACTIVE=docker

  userjob:
    depends_on:
      - eureka-server
      - zipkin
    image: alex0121/userjob:latest
    container_name: userjob
    build:
      context: userjob/.
      dockerfile: Dockerfile.layered #docker file path (. means root directory)
    ports:
      - "8000:8000"
    environment:
      - SPRING_PROFILES_ACTIVE=docker

内容的提问来源于stack exchange,提问作者Alex So

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 07:19:59