如何使用Spring WebFlux动态选择具有相同请求的控制器?

gr8qqesn  于 2022-12-17  发布在  Spring
关注(0)|答案(1)|浏览(149)

我有一个使用Spring WebFlux实现的应用程序,路由是通过RouterFunctions完成的。现在我希望控制器的选择基于一些动态定制的类 * 在运行时 * 而不是静态的URI模式或请求头,如何做到这一点?
例如:有一个路径为/v1/xyz的请求,今天我们希望该路径的60%随机请求发往控制器A,40%发往控制器B,明天这两个百分比将分别调整为80%和20%。因此,我需要一种机制来“动态地”决定同一请求发往哪个控制器,如何做到这一点?
谢谢你。

yqyhoc1h

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) {
   ...
    }

相关问题