Spring Cloud Gateway 返回 404 未找到错误

问题描述 投票:0回答:1

我尝试使用 Reactive 和 MVC Spring Cloud API 网关,但在两次尝试中我都在 Postman 中收到 404 Not Found 错误响应。

我只有一个用户服务、一个发现服务器(Eureka)和一个 API 网关服务。我可以在尤里卡仪表板中看到它们。

当我直接向用户服务发送请求时,我收到了响应,但当我向 API 网关发送请求时却没有收到响应。由于某些原因,它可能无法将请求路由到指定的服务。

API网关属性:

server:
  port: 3030

spring:
  application:
    name: API-GATEWAY

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka

cloud:
  gateway:
    routes:
      - id: user-service
        uri: lb://user-service
        predicates:
          - Path=/api/v1/user/**
  discovery:
    locator:
      enabled: true
      lower-case-service-id: true

用户服务属性:

server:
  port: 1000

spring:
  application:
    name: USER-SERVICE

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka

发现服务器属性:

server:
  port: 8761

spring:
  application:
    name: DISCOVERY-SERVER
eureka:
  instance:
    hostname: localhost
  client:
    register-with-eureka: false
    fetch-registry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

用户控制器:

@RestController
@RequestMapping("/api/v1/user")
public class UserController {

    @GetMapping()
    public String getUser() {
        return "This is a user.";
    }

}

我一直在关注 YT 上有关微服务的一些教程,并执行了确切的步骤,它对他们有用,但对我不起作用。

我正在使用 Spring Boot 3.2.1、Java 21 和 Gradle-Kotlin。我还确保所有必需的依赖项都已到位。

java spring-boot microservices api-gateway spring-cloud-gateway
1个回答
0
投票

在谓词中添加一些用户服务标识符,而不是直接 API URL,我不确定

lb://user-service
是否可以在本地工作,所以首先尝试将其替换为
http://localhost:<user-service-port>
,所以它看起来像这样:

cloud:
  gateway:
    routes:
      - id: user-service
        uri: http://localhost:8080 
        predicates:
          - Path=/gateway/user/**

那么完整的 API URI 将类似于

http://localhost:9000/gateway/user/api/v1/user

© www.soinside.com 2019 - 2024. All rights reserved.