小编Rub*_*ace的帖子

如何使用WebClient压缩JSON请求体?

我需要进行POST使用WebClient,服务器要求对正文进行压缩。我已经检查了此处此处之前提出的问题,但没有一个问题可以帮助我理解需要做什么。

我的代码看起来像这样:

webClient.post()
    .bodyValue(requestBody)
    .retrieve()
    .bodyToMono(Response.class)
Run Code Online (Sandbox Code Playgroud)

我想requestBody使用 gzip 发送压缩文件。我们使用 RestTemplate 和自定义来完成此操作GZipFilter,但我现在不知道如何使用 WebClient 来完成此操作。

spring spring-boot spring-webflux

6
推荐指数
1
解决办法
2969
查看次数

在非阻塞应用程序上应用 Bulkhead 模式的目的是什么?

我对Bulkhead模式的理解是它是一种隔离线程池的方式。因此,与不同服务的交互使用不同的线程池:如果共享同一个线程池,一个服务不断超时可能会耗尽整个线程池,从而中断与其他(健康)服务的通信。通过使用不同的,可以减少影响。

根据我的理解,我认为没有任何理由将此模式应用于非阻塞应用程序,因为线程不会被阻塞,因此线程池也不会耗尽。

如果有人能澄清这一点,以防我遗漏了什么,我将不胜感激。

编辑(解释为什么它不重复):

还有另一个(更通用的)问题询问为什么将 Circuit-Breaker 和 Bulkhead 模式与 Reactor 一起使用。这个问题以非常通用的方式得到了回答,解释了为什么所有 Resilience4J 装饰器在使用 Reactor 时都是相关的。

另一方面,我的问题是隔板模式特有的,因为我不明白它在线程不被阻塞的情况下的好处。

project-reactor spring-webflux resilience4j

3
推荐指数
1
解决办法
1215
查看次数

如何在 WebClient 上记录“真实”的 Http 标头

我目前正在使用ExchangeFilterFunction记录进入ClientRequest实例内的所有标头,我正在访问它们做request.headers().

执行我的过滤器后,HttpClient下面会添加某些标头,例如那个标头Accept-Encoding,因此不会被记录,因为它们永远不会被添加到ClientRequest实例中。

我的过滤器看起来像这样:

public class WebClientLoggingFilter implements ExchangeFilterFunction {

    @Override
    public Mono<ClientResponse> filter(final ClientRequest clientRequest, final ExchangeFunction next) {
         return Mono.just(clientRequest)
               .doOnNext(request -> log(request.headers().toString()))
               .flatMap(next::exchange)
               .doOnNext(clientResponse -> logData(clientRequestData, message, clientResponse));
  } 
}
Run Code Online (Sandbox Code Playgroud)

此过滤器将所有内容记录在ClientRequest标头中,但随后HttpClient会发挥其魔力,即使在响应返回之后,它也永远不会到达 ClientRequest。来自 Netty的代码示例

有没有其他方法可以进行日志记录,以便我可以访问真正通过网络发送的内容?

spring netty project-reactor reactor-netty spring-webflux

1
推荐指数
1
解决办法
934
查看次数