当前位置: 首页 > 知识库问答 >
问题:

aws上的eureka客户端无法连接到对等服务(eureka客户端)

郑俊弼
2023-03-14

我正在使用spring、spring boot、eureka(用于服务发现)和ribbon开发一个微服务应用程序。

我的应用程序由三个服务组成:客户端、服务器和eureka服务器

客户端和服务器都在eureka服务器上注册,之后客户端使用eureka服务发现调用服务器。

我可以在本地运行应用程序,一切都很好。

但是当部署在aws上时,事情就会失控。

接下来的步骤

  • 同一安全组中有三个ec2实例
  • 每个微服务都以docker容器的形式运行,并具有适当暴露的端口
  • 一个ec2实例具有弹性ip。Eureka服务器容器正在其上运行
  • 客户机和服务器容器部署在另外两个ec2实例上

后果

使用ECS时

>

  • 客户机和服务器可以在Eureka服务器上注册。

    Application AMIs    Availability Zones  Status
    HELLO-CLIENT    n/a (1) (1) UP (1) - 3fcd1c92386d:hello-client:8071
    HELLO-SERVER    n/a (1) (1) UP (1) - 6a5d643b32e1:hello-server:8072
    

    当点击客户端endpoint获取java时。网未知后异常。

    Whitelabel Error Page
    
    This application has no explicit mapping for /error,so you are seeing
    this as a fallback.
    
    Sun Sep 10 08:38:17 GMT 2017
    There was an unexpected error (type=Internal Server Error, status=500).
    I/O error on GET request for "http://hello-server/hello/server/":6a5d643b32e1; 
    nested exception is java.net.UnknownHostException: 
    6a5d643b32e1
    

    使用Docker Swarm时

    >

  • 客户机和服务器可以在Eureka服务器上注册。

    Application AMIs    Availability Zones  Status
    HELLO-CLIENT    n/a (1) (1) UP (1) - ip-10-255-0-5.ap-south-1.compute.internal:hello-client:8071
    HELLO-SERVER    n/a (1) (1) UP (1) - ip-10-255-0-6.ap-south-1.compute.internal:hello-server:8072
    

    命中客户端终结点时,获取连接超时。

    白标错误页

    This application has no explicit mapping for /error, so you are seeing 
    this as a fallback.
    
    Sun Sep 10 11:22:20 GMT 2017
    There was an unexpected error (type=Internal Server Error, status=500).
    I/O error on GET request for "http://hello-server/hello/server/": 
    Operation timed out (Connection timed out); nested exception is 
    java.net.ConnectException: Operation timed out (Connection timed out)
    

    尤里卡构型

        application.properties
        --------
        spring.application.name=eureka-server
        server.port=8070
    
        bootstrap.yml
        --------
        eureka:
          client:
            registerWithEureka: false
            fetchRegistry: false
            server:
              waitTimeInMsWhenSyncEmpty: 0
            service-url:
              defaultZone: http://<Elastic IP of eureka server>:8070/eureka
    

    服务器配置

        application.properties
        --------
        spring.application.name=hello-server
        server.port=8072
    
        bootstrap.yml
        --------
        eureka:
          client:
            service-url:
              defaultZone: http://<Elastic IP of eureka server>:8070/eureka
    

    客户端配置

        application.properties
        --------
        spring.application.name=hello-client
        server.port=8071
    
        bootstrap.yml
        --------
        eureka:
          client:
            service-url:
              defaultZone: http://<Elastic IP of eureka server>:8070/eureka
    

    Rest客户端配置

        Resource.java
        ---------------------------------
        @Autowired
        RestTemplate restTemplate;
    
        @GetMapping
        @RequestMapping("/hello/client")
        public String hello(){
                String uri = "http://hello-server/hello/server/";
                return restTemplate.getForObject(uri, String.class);
        }
    
    
        Config.java
        ----------------------------
        @LoadBalanced
        @Bean
        public RestTemplate restTemplate(){
        return  new RestTemplate();
        }
    
  • 共有1个答案

    沈永新
    2023-03-14

    我能够解决这个问题。这里的问题是系统试图ping尤里卡客户端使用docker容器ID作为主机,系统无法解决。在微服务配置中,为所有服务设置eureka.instance.preferIp地址=true。肯定会解决问题的。

     类似资料:
    • pom.xml 主应用程序类 Application.Properties eureka客户端设置 pom.xml Application.Properties 我在eureka-server仪表板(http://localhost:8761)中没有看到向Eureka server注册的micro-service-currency-exchange-service 为什么eureka客户端没有注册

    • 服务发现是基于微服务架构的关键原则之一。尝试配置每个客户端或某种形式的约定可能非常困难,可以非常脆弱。Netflix服务发现服务器和客户端是Eureka。可以将服务器配置和部署为高可用性,每个服务器将注册服务的状态复制到其他服务器。 如何包含Eureka客户端 要在您的项目中包含Eureka客户端,请使用组org.springframework.cloud和工件ID spring-cloud-st

    • 我能够让eureka服务器以点对点模式运行。但我很好奇的一件事是如何让服务发现客户端注册到多个eureka服务器。 我的用例如下:<br>假设我有一个服务注册到其中一个eureka服务器(例如服务器a),并且该注册被复制到它的对等服务器。服务实际上指向服务器A。如果服务器A停机,客户机希望与服务器A续费,如果服务器A不再存在,续费如何工作。我是否需要同时向这两个服务器注册?如果不是,那么如果客户端

    • 这是我使用PCF开发的第一个微服务。我创建了以下Eureka服务器应用程序。 以下是eureka服务器服务的属性 以下是eureka客户服务 以下是eureka客户端服务的属性 我已经在本地服务器上运行的PCF Dev实例上部署了微服务 当我运行服务器时 http://eureka-client.local.pcfdev.io/service-instances/eureka-client 当我试

    • 我对docker,Spring框架的一切都很陌生…它们成功地在localhost环境中运行,现在我想把它们推送到docker中,但是总是给我错误,我在那里卡住了大约一周。有人能帮我弄清楚吗!!! 现在我有 eureka 服务器和云配置服务器服务,这是我的代码: 尤里卡服务器应用程序.yml 和 Dockerfile: 现在我有云配置服务器应用程序.yml:在这个文件中,我试图在github上备份它