我尝试使用 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。我还确保所有必需的依赖项都已到位。
在谓词中添加一些用户服务标识符,而不是直接 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