首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >网关路由不工作

网关路由不工作
EN

Stack Overflow用户
提问于 2020-12-17 01:48:23
回答 13查看 22.8K关注 0票数 5

我使用以下技术设计了一个微服务原型

  1. Eureka Server
  2. a service
  3. Spring Cloud Gateway

上述服务已在Eureka服务器中注册

API网关路由配置

代码语言:javascript
复制
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/**

服务配置

代码语言:javascript
复制
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

控制器

代码语言:javascript
复制
@RestController
@RequestMapping("/service1")
public class HomeController {
    @GetMapping("/message")
    public String hello() {
        return "response from micro service1";
    }

}

当我向网关发送请求时,它将显示以下错误

代码语言:javascript
复制
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]

如何解决上述问题?

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2020-12-17 04:46:11

我已经修改了API门路由配置,如下所示

代码语言:javascript
复制
spring.cloud.gateway.routes[0].id=service1
spring.cloud.gateway.routes[0].uri=http://localhost:8081/service1/
spring.cloud.gateway.routes[0].predicates[0]=Path=/service1/**

现在工作很好

票数 5
EN

Stack Overflow用户

发布于 2021-01-18 06:58:41

在这两个微服务实例中添加eureka.instance.hostname=localhost,这样可以工作,并且不会产生错误。

票数 7
EN

Stack Overflow用户

发布于 2022-04-05 15:48:05

将这个bean添加到您的API网关中,您就可以使用了。

代码语言:javascript
复制
@Bean
public HttpClient httpClient() {
    return HttpClient.create().resolver(DefaultAddressResolverGroup.INSTANCE);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65333590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档