【发布时间】:2021-03-27 17:21:57
【问题描述】:
我使用以下技术设计了一个微服务原型
- 尤里卡服务器
- 服务
- Spring Cloud API 网关
上面提到的服务都注册到了Eureka Server
API 网关路由配置
server.port=8080
eureka.client.serviceUrl.defaultZone = http://localhost:8083/eureka
spring.application.name=ApiGateway
spring.cloud.gateway.discovery.locator.enabled=true
spring.cloud.gateway.discovery.locator.lower-case-service-id=true
spring.cloud.gateway.routes[0].id=service1
spring.cloud.gateway.routes[0].uri=lb://MICROSERVICE1
spring.cloud.gateway.routes[0].predicates[0]=Path=/service1/**
服务配置
server.port=8081
server.address=127.0.0.1
eureka.client.serviceUrl.defaultZone = http://localhost:8083/eureka
spring.application.name=MicroService1
error.whitelabel.enabled= false
控制器
@RestController
@RequestMapping("/service1")
public class HomeController {
@GetMapping("/message")
public String hello() {
return "response from micro service1";
}
}
当我向网关发送请求时,它显示以下错误
2020-12-16 22:26:09.770 ERROR 16700 --- [ctor-http-nio-3] a.w.r.e.AbstractErrorWebExceptionHandler : [d3334561-1] 500 Server Error for HTTP GET "/service1/message"
java.net.UnknownHostException: failed to resolve 'LAPTOP-KU56B6A8' after 3 queries
at io.netty.resolver.dns.DnsResolveContext.finishResolve(DnsResolveContext.java:1013) ~[netty-resolver-dns-4.1.55.Final.jar:4.1.55.Final]
Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:
Error has been observed at the following site(s):
|_ checkpoint ⇢ org.springframework.cloud.gateway.filter.WeightCalculatorWebFilter [DefaultWebFilterChain]
|_ checkpoint ⇢ HTTP GET "/service1/message" [ExceptionHandlingWebHandler]
我们如何解决上述问题?
【问题讨论】:
-
将:eureka.instance.prefer-ip-address=true 添加到 application.properties 文件到您所有的微服务和 api-gateway
-
在您的服务配置中,您已将应用程序名称设置为
MicroService1,但在 API 网关路由配置中将 id 设置为service1。此外,您的 uri 设置为MICROSERVICE1。 3个都不一样,为什么?将 id 和 uri 放入MicroService1,因为应用程序名称仅在其中注册。看看有没有帮助!
标签: spring-boot spring-cloud-gateway