loveqq-mvc 再进化,又一款分布式网关框架可用


loveqq-mvc 是 loveqq-framework 框架的一个模块,旨在提供统一的 web server 抽象,统一响应式/命令式编程风格。

loveqq-mvc 中一直都有路由的概念,但是由于一直仅基于 RequestMapping 注解开发,所以路由的概念比较模糊,几乎绑定到了控制器+方法的实现上。
从而导致请求分发器(AbstractDispatcher)中耦合了大量的和 java 方法相关的处理逻辑。

因此,最新的里程碑版本,将路由的概念明确抽象出来,而路由最终如何应用则交由路由本身处理。从而请求分发器的职责更清晰,路由的扩展性更强。
最新版本将路由抽象为 Route 接口,而原有的基于控制器+方法的路由则作为一种实现而存在(HandlerMethodRoute)。

本次更新的网关路由(GatewayRoute),就是基于 Route 接口的扩展实现。
没错,仅仅扩展一下就可以实现分布式网关的功能,并且用户还可以自行扩展自己的路由实现,为更多路由场景提供了无限可能。

由于网关路由对性能要求较高,因此仅有同时支持响应式/命令式的 loveqq-boot-starter-netty 启动器支持。
下面介绍一下网关路由的配置方式:
yaml 配置风格:

k:
server:
port: 8080
virtualThread: false
gateway:
routes:
- uri: lb://demo
# 下面注释的是全配置形式,示例是两种简易形式
predicates: Path=/api/demo/** # 最简配置形式
#- id: Path
#args:
#path: /api/demo/**
filters: StripPrefix=stripPrefix=1# 多参数简易配置形式
#- id: StripPrefix
#args:
#stripPrefix: 1

两种编码配置风格:

/**
 * 以 RouteDefinition 的方式配置
 *
 * @return 路由定义
 */
@Bean
public RouteDefinition routeDefinition() {
return RouteDefinition.builder()
.uri("http://127.0.0.1:8080")
.predicate(RouteDefinition.Predicates.builder().id("Path").args("path", "/api/demo/**").build())
.filter(RouteDefinition.Filters.builder().id("StripPrefix").args("stripPrefix", "1").build())
.order(1)
.build();
}

/**
 * 以 GatewayRoute 的方式配置,不推荐
 *
 * @return 路由定义
 */
@Bean
public GatewayRoute gatewayRoute(PathGatewayPredicate pathGatewayPredicate,
 StripPrefixGatewayFilter stripPrefixGatewayFilter) {
pathGatewayPredicate.setConfig(new PathGatewayPredicate.Config("/api/demo/**"), null);
stripPrefixGatewayFilter.setConfig(new StripPrefixGatewayFilter.Config(1), null);

GatewayRoute route = new GatewayRoute();
route.setUri(URI.create("http://127.0.0.1:7070"));
route.setPredicates(Arrays.asList(pathGatewayPredicate));
route.setFilters(Arrays.asList(stripPrefixGatewayFilter));
route.setOrder(1);
return route;
}

 

网关路由代码示例已上传 loveqq-framework-example,感兴趣的童鞋可以看看。


相關推薦

2025-05-28

ore,去除 cglib 代理,使用基于 javassist 的类代理 新增:loveqq-mvc,支持自动暴露公开方法为 post api,进一步减少重复代码 新增:loveqq-boot-starter-test,新增单元测试模块,测试类添加 @LoveqqTest 即可 优化:loveqq-boot-starter-discover

2025-05-13

性”走向更成熟阶段,也是 Istio 与 Kubernetes 深度集成的又一里程碑。作为云原生网络的核心基础设施,Istio 将持续推动面向服务的流量治理、安全与可观测性演进。 本次发布支持 Kubernetes 1.29 至 1.32(预计兼容 1.33),如计划

2024-10-18

享存储,Doris 不再有多副本一致性的逻辑,会大幅度简化分布式存储带来的复杂度,从而会提升系统的鲁棒性。 数据共享和克隆的灵活性:存算分离架构的灵活性不止在一个 Doris 集群内部,在跨 Doris 集群时也应该体现出灵

2023-07-08

级,无需依赖任何第三方中间件或数据库就能支持集群、分布式 通过 ioGame 可以很容易的搭建出一个集群无中心节点、集群自动化、多进程的分步式游戏服务器 包体小、启动快、内存占用少、更加的节约、无需配置文件、提

2023-05-09

级,无需依赖任何第三方中间件或数据库就能支持集群、分布式 通过 ioGame 可以很容易的搭建出一个集群无中心节点、集群自动化、多进程的分步式游戏服务器 包体小、启动快、内存占用少、更加的节约、无需配置文件、提

2023-09-07

级,无需依赖任何第三方中间件或数据库就能支持集群、分布式 通过 ioGame 可以很容易的搭建出一个集群无中心节点、集群自动化、多进程的分步式游戏服务器 包体小、启动快、内存占用少、更加的节约、无需配置文件、提

2023-08-08

级,无需依赖任何第三方中间件或数据库就能支持集群、分布式 通过 ioGame 可以很容易的搭建出一个集群无中心节点、集群自动化、多进程的分步式游戏服务器 包体小、启动快、内存占用少、更加的节约、无需配置文件、提

2023-06-09

级,无需依赖任何第三方中间件或数据库就能支持集群、分布式 通过 ioGame 可以很容易的搭建出一个集群无中心节点、集群自动化、多进程的分步式游戏服务器 包体小、启动快、内存占用少、更加的节约、无需配置文件、提

2023-07-19

级,无需依赖任何第三方中间件或数据库就能支持集群、分布式 通过 ioGame 可以很容易的搭建出一个集群无中心节点、集群自动化、多进程的分步式游戏服务器 包体小、启动快、内存占用少、更加的节约、无需配置文件、提

2022-09-13

Kong 是一款可扩展、快速且开源的微服务 API 网关,用于管理、保护与连接混合及云原生架构。 目前 Kong 发布了 3.0.0 版本,这个主要版本添加了一个用 Rust 编写的新路由器,和一个与 OpenTelemetry API 规范兼容的跟踪 API。此外,还

2023-08-19

级,无需依赖任何第三方中间件或数据库就能支持集群、分布式 通过 ioGame 可以很容易的搭建出一个集群无中心节点、集群自动化、多进程的分步式游戏服务器 包体小、启动快、内存占用少、更加的节约、无需配置文件、提

2025-06-17

无缝接入;支持企业级的 MCP 集成,包括 Nacos MCP Registry 分布式注册与发现、自动 Router 路由等。 3. 探索具备自主规划能力的通用智能体产品与平台 社区发布了基于 Spring AI Alibaba 框架实现的 JManus 智能体,除了对标 Manus 的通用

2025-06-19

器通信、集群无中心节点、集群自动化、有状态多进程的分布式的网络编程服务器呢? 如果是的话,这里向你推荐一个由 java 语言编写的网络编程框架 ioGame。 ioGame 是一个轻量级的网络编程框架,适用于网络游戏服务器、物联

2025-07-26

ioGame 是 java、netty 分布式网络游戏服务器框架。框架具备一次编写到处对接的能力,为客户端提供了代码生成的辅助功能,能够帮助客户端开发者减少巨大的工作量。你只需要编写一次 java 代码,就能为 Godot、UE、Unity、CocosCreato