概要
Java 的Gateway
是指 Spring Cloud Gateway,它是 Spring Cloud 中的一个项目,用于提供一种简单而高效的方式来实现服务之间的通信和路由。它是基于 Spring WebFlux 框架构建的,是一种响应式的、非阻塞的 Web 框架,能够提高系统的性能和并发能力。
创建一个配置类
在 Spring Boot 项目中,创建一个名为GatewayConfig.java的配置类,这个类将用于定义 Gateway 的路由规则。
import org.springframework.cloud.gateway.route.Route;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.locator.SimpleRouteLocator;
import org.springframework.context.annotation.Configuration;
@Configuration
public class GatewayConfig {
// 定义一个路由,将所有请求转发到 http://example.com
private static final Route DEFAULT_ROUTE = new Route()
. uri("http://example.com")
. id("default");
// 创建一个 RouteLocator 实例,该实例包含了所有的路由规则
private static final RouteLocator ROUTE_LOCATOR = new SimpleRouteLocator()
. routes(DEFAULT_ROUTE);
public RouteLocator getRouteLocator() {
return ROUTE_LOCATOR;
}
}
在启动类上添加@EnableGateway注解
在 Spring Boot 的启动类上添加@EnableGateway注解,这样就可以启用 Gateway 功能了。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.gateway.EnableGateway;
@EnableGateway
@SpringBootApplication
public class MyGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(MyGatewayApplication.class, args);
}
}
配置路由规则
在GatewayConfig.java配置类中,可以定义多个路由规则。每个路由规则都由一个Route对象表示,其中包含了路由的目标 URL(uri)和唯一标识(id)。你可以使用不同的路由策略来匹配请求,例如路径匹配、前缀匹配、正则表达式匹配等。
import org.springframework.cloud.gateway.route.Route;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.locator.SimpleRouteLocator;
import org.springframework.context.annotation.Configuration;
@Configuration
public class GatewayConfig {
// 定义一个路由,将所有请求转发到 http://example.com
private static final Route DEFAULT_ROUTE = new Route()
. uri("http://example.com")
. id("default");
// 定义一个路由,将以 /users 开头的请求转发到 http://user-service:8080
private static final Route USER_ROUTE = new Route()
. uri("http://user-service:8080")
. id("user")
. predicates(new PathPrefixPredicate("/users"));
// 创建一个 RouteLocator 实例,该实例包含了所有的路由规则
private static final RouteLocator ROUTE_LOCATOR = new SimpleRouteLocator()
. routes(DEFAULT_ROUTE, USER_ROUTE);
public RouteLocator getRouteLocator() {
return ROUTE_LOCATOR;
}
}
启动应用程序
完成配置后,就可以启动 Spring Boot 应用程序了。启动后,Gateway 将开始监听指定的端口(默认是 8080),并根据配置的路由规则将请求转发到相应的目标服务。