使用SpringGateway和eureka的java名称解析失败

nxagd54h  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(469)

很好的一天,
目前,我正在开发一个非常简单的网关,它(目前)只需要重定向传入的httppost和get请求。
设置:
eureka服务器:我的spring-boot微服务注册的位置;
spring网关:Map所有传入的httppost和get请求,并将它们路由到适当的微服务;
SpringBoot微服务:按要求做一些事情:)
注意:我对这个网关的东西有点陌生,只是你知道:)。
微服务在eureka服务器上注册良好。它基于web的gui向我显示示例“mymicro服务”已在eureka服务器上注册。其他(spring-boot)服务可以使用这个名称(“我的微服务”),而不会出现问题,因此对它们来说,它可以正常工作。只是这个网关不能处理示例名;它似乎只接受ip地址(我只是想阻止,因为微服务可以从服务器及其ip地址更改)。而且eureka服务器没有配置为只允许/使用ip地址。
问题是:
当网关有一个包含微服务ip地址的路由时,所有这些都可以顺利运行。但是我想要的是让网关从eureka服务器解析服务id。如果我这么做了,它会给我一个 java.net.UnknownHostException: MY-MICRO-SERVICE: Temporary failure in name resoultion .
问题是:
现在,为什么我不能在springgateway中使用spring应用程序的名称“mymicro-service”(即注册的spring-boot-microservice)(当在其他微服务中使用时,这种构造可以很好地工作)?一个yaml配置文件不能处理这样的示例名,仅仅是ip地址吗?
细节
网关主要通过yaml配置文件进行配置。只有一个简单的java类启动了网关应用程序。路由都在yaml配置文件中设置。
spring网关应用程序类

@SpringBootApplication
@EnableEurekaClient
public class MyGatewayApplication {

  public static void main(String[] args) {
    SpringApplication.run(MyGatewayApplication.class, args);
  }
}

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

spring:
  application:
    name: my-gateway
  cloud:
    gateway:
      discovery:
        locator:
          lowerCaseServiceId: true
          enabled: true
      globalcors:
        corsConfigurations:
          '[/**]':
            allowedOrigins: "*"
            allowedMethods:
              - GET
              - POST
      routes:
        - id: my_route
          uri: http://MY-MICRO-SERVICE
          predicates:
            - Path=/test/**
server:
  port: 8999

info:
  app:
    properties: dev

错误

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]
...
wztqucjr

wztqucjr1#

问题已解决。
我把“http”改成了“lb”协议,解决了我的问题。据我所知,“lb”代表负载平衡。我的本地计算机上没有活动的负载平衡器,但无论如何:这是可行的。

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

相关问题