我有一个使用Spring WebFlux实现的应用程序,路由是通过RouterFunctions完成的。现在我希望控制器的选择基于一些动态定制的类 * 在运行时 * 而不是静态的URI模式或请求头,如何做到这一点?例如:有一个路径为/v1/xyz的请求,今天我们希望该路径的60%随机请求发往控制器A,40%发往控制器B,明天这两个百分比将分别调整为80%和20%。因此,我需要一种机制来“动态地”决定同一请求发往哪个控制器,如何做到这一点?谢谢你。
yqyhoc1h1#
您可以使用Spring WebFlux功能终点一种轻量级函数式编程模型,其中函数用于路由和处理请求与控制器相比,这将为您提供更大的灵活性和控制。
@Bean RouterFunction<ServerResponse> xyzRoute() { return route(POST("/v1/xyz"), req -> handler(req)); } Mono<ServerResponse> handler(ServerRequest serverRequest) { return evaluateCondition() .flatMap(condition -> { if (Boolean.TRUE.equals(condition)) { retrun handler1(serverRequest); } else { retrun handler2(serverRequest); } }); } Mono<ServerResponse> handler1(ServerRequest serverRequest) { ... } Mono<ServerResponse> handler2(ServerRequest serverRequest) { ... }
1条答案
按热度按时间yqyhoc1h1#
您可以使用Spring WebFlux功能终点
一种轻量级函数式编程模型,其中函数用于路由和处理请求
与控制器相比,这将为您提供更大的灵活性和控制。