Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring Gateway和Eureka的名称解析失败_Java_Spring_Spring Boot_Netflix Eureka_Gateway - Fatal编程技术网

Java Spring Gateway和Eureka的名称解析失败

Java Spring Gateway和Eureka的名称解析失败,java,spring,spring-boot,netflix-eureka,gateway,Java,Spring,Spring Boot,Netflix Eureka,Gateway,你好 目前,我正在开发一个非常简单的网关,它(目前)只需要重定向传入的HTTP POST和GET请求 设置: Eureka服务器:我的Spring Boot微服务注册的位置 Spring网关:映射所有传入的HTTP POST和GET请求,并将它们路由到适当的微服务 Spring Boot微服务:按要求做一些事情:) 注意:我对这个网关的东西有点陌生,只是你知道:) 微服务在Eureka服务器上注册良好。它基于Web的GUI向我显示实例“MY-MICRO-SERVICE”已在Eureka服务器

你好

目前,我正在开发一个非常简单的网关,它(目前)只需要重定向传入的HTTP POST和GET请求

设置:

  • Eureka服务器:我的Spring Boot微服务注册的位置
  • Spring网关:映射所有传入的HTTP POST和GET请求,并将它们路由到适当的微服务
  • Spring Boot微服务:按要求做一些事情:)
注意:我对这个网关的东西有点陌生,只是你知道:)

微服务在Eureka服务器上注册良好。它基于Web的GUI向我显示实例“MY-MICRO-SERVICE”已在Eureka服务器上注册。其他(Spring Boot)服务可以使用该名称(“MY-MICRO-SERVICE”)而不会出现问题,因此对它们来说,它可以正常工作。只是这个网关不能处理实例名;它似乎只接受IP地址(我只是想阻止,因为微服务可以从服务器更改,从而更改其IP地址)。而且Eureka服务器未配置为仅允许/使用IP地址


问题:

当网关有一个包含微服务IP地址的路由时,所有这些都可以顺利运行。但我想要的是让网关从Eureka服务器解析服务ID。如果我这样做,它会给我一个
java.net.UnknownHostException:MY-MICRO-SERVICE:name resourcion中的临时故障


问题:

现在,为什么我不能在SpringGateway中使用Spring应用程序的名称“MY-MICRO-SERVICE”(即注册的SpringBoot微服务)(而这种结构在其他微服务中使用时效果良好)?Yaml配置文件不能处理这样的实例名称吗,仅仅是IP地址


详细信息

网关主要通过yaml配置文件进行配置。只有一个简单的Java类启动网关应用程序。路由都在yaml配置文件中设置

Spring网关应用程序类

网关Yaml配置文件(application.yml)

错误

问题已经解决

我将“http”改为“lb”协议,解决了我的问题。据我理解,“lb”代表负载平衡。我的本地机器上没有活动的loadbalancer,但无论如何:这是可行的

   - POST
      routes:
        - id: my_route
          uri: lb://MY-MICRO-SERVICE
          predicates:
            - Path=/test/**
问题已经解决

我将“http”改为“lb”协议,解决了我的问题。据我理解,“lb”代表负载平衡。我的本地机器上没有活动的loadbalancer,但无论如何:这是可行的

   - POST
      routes:
        - id: my_route
          uri: lb://MY-MICRO-SERVICE
          predicates:
            - Path=/test/**

另一个注意事项:我还添加了Bean-LoadBalanced公共WebClient.Builder方法(返回WebClient.Builder())。上面描述的主要方法不再使用LoadBalancer进行注释(因为它不是bean)。但仍然存在同样的问题。另一个注意事项:我还添加了一个Bean-LoadBalanced公共WebClient.Builder方法(返回WebClient.Builder())。上面描述的主要方法不再使用LoadBalancer进行注释(因为它不是bean)。但同样的问题依然存在。
java.net.UnknownHostException: MY-MICRO-SERVICE: Temporary failure in name resolution
    at java.base/java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) ~[na:na]
    at java.base/java.net.InetAddress$PlatformNameService.lookupAllHostAddr(InetAddress.java:929) ~[na:na]
    at java.base/java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1515) ~[na:na]
    at java.base/java.net.InetAddress$NameServiceAddresses.get(InetAddress.java:848) ~[na:na]
    at java.base/java.net.InetAddress.getAllByName0(InetAddress.java:1505) ~[na:na]
    at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1364) ~[na:na]
    at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1298) ~[na:na]
    at java.base/java.net.InetAddress.getByName(InetAddress.java:1248) ~[na:na]
    at io.netty.util.internal.SocketUtils$8.run(SocketUtils.java:146) ~[netty-common-4.1.36.Final.jar:4.1.36.Final]
...
   - POST
      routes:
        - id: my_route
          uri: lb://MY-MICRO-SERVICE
          predicates:
            - Path=/test/**