API 网关不起作用。抛出 java.net.UnknownHostException:无法解析

San*_*tta 5 service spring spring-boot microservices api-gateway

我正在使用 Spring 版本 - 2.4.5

\n

应用程序属性:

\n
spring.application.name = api-gateway\nserver.port = 8765\n#Had to put the below as I was facing No spring.config.import pro#perty has been defined and this has been put in currency exchang#e, currency converter and naming server as well\nspring.cloud.config.enabled=false \n\neureka.client.service-url.defaultZone = http://localhost:8761/eureka\n\nspring.cloud.gateway.discovery.locator.enabled=true\n\n#Tried the below two, but couldnt resolve the issue\neureka.instance.hostname=localhost\nspring.cloud.gateway.discovery.locator.lower-case-service-id=true\n
Run Code Online (Sandbox Code Playgroud)\n

所有依赖项均已正确导入。

\n

POM文件

\n
<?xml version="1.0" encoding="UTF-8"?>\n<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\n    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">\n    <modelVersion>4.0.0</modelVersion>\n    <parent>\n        <groupId>org.springframework.boot</groupId>\n        <artifactId>spring-boot-starter-parent</artifactId>\n        <version>2.4.5</version>\n        <relativePath/> <!-- lookup parent from repository -->\n    </parent>\n    <groupId>com.in28minutes.microservices</groupId>\n    <artifactId>api-gateway</artifactId>\n    <version>0.0.1-SNAPSHOT</version>\n    <name>api-gateway</name>\n    <description>Demo project for Spring Boot</description>\n    <properties>\n        <java.version>11</java.version>\n        <spring-cloud.version>2020.0.2</spring-cloud.version>\n    </properties>\n    <dependencies>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-actuator</artifactId>\n        </dependency>\n        <dependency>\n            <groupId>org.springframework.cloud</groupId>\n            <artifactId>spring-cloud-starter-config</artifactId>\n        </dependency>\n        <dependency>\n            <groupId>org.springframework.cloud</groupId>\n            <artifactId>spring-cloud-starter-gateway</artifactId>\n        </dependency>\n        <dependency>\n            <groupId>org.springframework.cloud</groupId>\n            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-devtools</artifactId>\n            <scope>runtime</scope>\n            <optional>true</optional>\n        </dependency>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-test</artifactId>\n            <scope>test</scope>\n        </dependency>\n    </dependencies>\n    <dependencyManagement>\n        <dependencies>\n            <dependency>\n                <groupId>org.springframework.cloud</groupId>\n                <artifactId>spring-cloud-dependencies</artifactId>\n                <version>${spring-cloud.version}</version>\n                <type>pom</type>\n                <scope>import</scope>\n            </dependency>\n        </dependencies>\n    </dependencyManagement>\n\n    <build>\n        <plugins>\n            <plugin>\n                <groupId>org.springframework.boot</groupId>\n                <artifactId>spring-boot-maven-plugin</artifactId>\n            </plugin>\n        </plugins>\n    </build>\n\n</project>\n
Run Code Online (Sandbox Code Playgroud)\n

但在点击 api-gateway 时仍面临以下错误:

\n

http://localhost:8765/currency-exchange/currency-exchange/from/USD/to/INR(或)

\n

http://localhost:8765/CURRENCY-EXCHANGE/currency-exchange/from/USD/to/INR

\n
    Whitelabel Error Page\nThis application has no configured error view, so you are seeing this as a fallback.\n\nSat May 08 14:03:05 IST 2021\n[d1829095-3] There was an unexpected error (type=Internal Server Error, status=500).\nfailed to resolve 'XYZ.abc.def.com' after 2 queries\njava.net.UnknownHostException: failed to resolve 'XYZ.abc.def.com' after 2 queries \n    at io.netty.resolver.dns.DnsResolveContext.finishResolve(DnsResolveContext.java:1013)\n    Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: \nError has been observed at the following site(s):\n    |_ checkpoint \xe2\x87\xa2 org.springframework.cloud.gateway.filter.WeightCalculatorWebFilter [DefaultWebFilterChain]\n    |_ checkpoint \xe2\x87\xa2 org.springframework.boot.actuate.metrics.web.reactive.server.MetricsWebFilter [DefaultWebFilterChain]\n    |_ checkpoint \xe2\x87\xa2 HTTP GET "/CURRENCY-EXCHANGE/currency-exchange/from/USD/to/INR" [ExceptionHandlingWebHandler]\nStack trace:\n        at io.netty.resolver.dns.DnsResolveContext.finishResolve(DnsResolveContext.java:1013)\n        at io.netty.resolver.dns.DnsResolveContext.tryToFinishResolve(DnsResolveContext.java:966)\n        at io.netty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:414)\n        at io.netty.resolver.dns.DnsResolveContext.onResponse(DnsResolveContext.java:625)\n        at io.netty.resolver.dns.DnsResolveContext.access$400(DnsResolveContext.java:63)\n        at io.netty.resolver.dns.DnsResolveContext$2.operationComplete(DnsResolveContext.java:458)\n        at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:578)\n        at io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:571)\n        at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:550)\n        at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:491)\n        at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:616)\n        at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:605)\n        at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:104)\n        at io.netty.resolver.dns.DnsQueryContext.trySuccess(DnsQueryContext.java:201)\n        at io.netty.resolver.dns.DnsQueryContext.finish(DnsQueryContext.java:193)\n        at io.netty.resolver.dns.DnsNameResolver$DnsResponseHandler.channelRead(DnsNameResolver.java:1264)\n        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n        at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)\n        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n        at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)\n        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n        at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)\n        at io.netty.channel.nio.AbstractNioMessageChannel$NioMessageUnsafe.read(AbstractNioMessageChannel.java:97)\n        at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719)\n        at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655)\n        at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581)\n        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493)\n        at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)\n        at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)\n        at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)\n        at java.base/java.lang.Thread.run(Thread.java:832)\n
Run Code Online (Sandbox Code Playgroud)\n

小智 11

显然通过添加

eureka.instance.prefer-ip-address=true
eureka.instance.hostname=localhost
Run Code Online (Sandbox Code Playgroud)

在所有微服务(不包括名称服务)中都可以正常工作。

我还添加了@依赖项

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)