使用webClient和Mono的代理黑白客户端和服务

时间:2018-07-23 20:11:57

标签: spring-boot spring-webflux

我正在编写一个代理黑白客户端和服务,在代理中,我确实需要一些基本的验证并将请求传递给服务,我在下面编写了相同的代码。您能否让我知道这是正确的方法,还是有其他更好的方法来解决这个问题。

public Mono<ServerResponse> handlePostRequest(ServerRequest request) {
        return webClient.post().uri("/some/uri").headers(headers -> request.headers())
                        .body(request.bodyToMono(DataBuffer.class), DataBuffer.class)
                        .exchange()
                            .flatMap(response -> ServerResponse.status(response.statusCode())
                                            .headers(c -> response.headers().asHttpHeaders().forEach((name, value) -> c.put(name, value)))
                                            .body(response.bodyToMono(DataBuffer.class), DataBuffer.class));

}

1 个答案:

答案 0 :(得分:0)

此代码段中没有任何验证(尽管您在问题中提到了这一要求)。

我也没有看到任何错误管理,如果远程服务器返回HTTP错误(应该转发响应吗?),或者如果它没有应答并超时,则该错误管理应该处理服务器应响应的内容发生。

除此之外,鉴于您所分享的简短要求,这可能适合您的用例。

请注意,根据您对HTTP客户端库和服务器的选择,DataBuffer实例可以为PooledDataBuffer-这意味着引用是基于引用的,以允许它们被重用,而使用它们的代码是负责释放他们。在这种情况下,您将重用这些缓冲区,以将它们转发给客户端作为请求正文或转发给服务器作为响应正文。 release操作将在您写入网络之前完成。

最后,如果您要查找更复杂的功能,可以看看Spring Cloud Gateway project可以做到的更多。