Spring Cloud API Gateway 路由不起作用

arj*_*arj 3 spring-boot spring-cloud-gateway

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

  1. 尤里卡服务器(发现服务器)
  2. Spring boot(后端服务)
  3. Spring Cloud API 网关

上面提到的服务正在起床,ApI Gatewayback end servicesEureka服务器中注册

在此处输入图片说明

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/**
Run Code Online (Sandbox Code Playgroud)

微服务配置

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
Run Code Online (Sandbox Code Playgroud)

控制器

@RestController
@RequestMapping("/service1")
public class HomeController {
    @GetMapping("/message")
    public String hello() {
        return "response from micro service1";
    }

}
Run Code Online (Sandbox Code Playgroud)

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

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]
Run Code Online (Sandbox Code Playgroud)

我们如何解决上述问题。

小智 7

添加eureka.instance.hostname=localhost两个微服务实例,这将起作用并且不会给出错误


arj*_*arj 5

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

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/**
Run Code Online (Sandbox Code Playgroud)

现在工作正常

  • 通过消除负载平衡,您完全扼杀了微服务的目的。 (8认同)
  • 您只需删除负载平衡 (2认同)