spring-webflux 相关问题

Spring Framework 5包含一个新的spring-webflux模块。该模块包含对被动HTTP和WebSocket客户端以及被动服务器Web应用程序的支持,包括REST,HTML浏览器和WebSocket样式交互.WebFlux可以在Servlet容器上运行,支持Servlet 3.1非阻塞IO API以及其他异步运行时,如Netty和Undertow。

Spring Cloud Gateway 重定向由于自定义状态 302 代码被 200 状态代码覆盖而失败

Spring云网关版本:4.1.0 我正在尝试开发一个全局预过滤器,它拦截传入的登录请求,并使用重定向来重定向到登录页面(如果用户已经登录)...

回答 1 投票 0

在 spring webflux 中,如何更改重试的上下文?

我配置了一个反应器链,我想在失败时重试 - 我可以这样做,但是我无法更改上下文,以便链知道何时重试。 在下面的考试中...

回答 1 投票 0

Spring Boot Redisson 无法读取 clusterServersConfig

这是我用于 Spring WebFlux 项目的 application.yml 雷迪斯: 雷迪森: 配置:| 集群服务器配置: 空闲连接超时:10000 连接超时:${

回答 1 投票 0

刷新不适用于 Azure 应用程序配置 Spring Boot 2.6.6

您好,当我使用以下配置将其与我的 spring webflux 项目集成时,我遇到了从 Azure 应用程序配置更新配置的问题。我成功地能够

回答 1 投票 0

reactor.netty.ioWorkerCount 不同的默认计数

根据netty文档,默认的reactor.netty.ioWorkerCount计数是max(4,核心数),这在本地环境中似乎是正确的。我有一台6核笔记本电脑,还有reactor-http的数量...

回答 2 投票 0

Project Reactor Mono.就在 flatMap 中

尝试搜索一些有关此用法的信息,但尚未找到明确的答案。在阻塞操作上使用 flatMap(非反应式)。当某些操作如

回答 1 投票 0

WebClient 似乎会自行添加请求头。发生在哪里?

这是一个失败的测试: // 这些是非常基本的依赖项,所以我不会包含导入或 pom @测试 无效testIfNoHeadersAreAddedToRequestImplicitly(){ 单声道 这是一个失败的测试: // these are pretty basic dependencies so I won't include imports or pom @Test void testIfNoHeadersAreAddedToRequestImplicitly() { Mono<Map<String, Object>> responseMono = WebClient.builder() .baseUrl("https://httpbin.org") .build() .get() .uri("/headers") .retrieve() .bodyToMono(new ParameterizedTypeReference<>() {}); StepVerifier.create(responseMono.map(m -> m.get("headers")).cast(Map.class)) .expectNextMatches(Map::isEmpty) .verifyComplete(); } 我很确定 WebClient 添加了一些默认请求标头,例如 HOST,我想 👀 see 它发生在哪里。碰巧我需要禁用此功能,但我同样渴望👀看到原因 到目前为止,我对这个问题的调试并不成功 - 包括对 DefaultWebClient.exchange() 的调试,它似乎按预期工作 但是,我发现一个错误的请求被传递给了这个回调 // org.springframework.http.client.reactive.ReactorClientHttpConnector.connect(..) return requestSender // put a breakpoint on the lambda .send((request, outbound) -> requestCallback.apply(adaptRequest(method, uri, request, outbound))) 当我深入挖掘时,Netty 只是假装这些标头一直存在(一旦出现任何请求,它就已经具有这些默认标头) 这个问题也用 WireMock 重现,所以它不太可能与 httpbin 有任何关系(顺便说一句,如果你不熟悉它,你可以访问 API 页面) 当准备发送请求时,Netty 显式添加默认标头。主要兴趣点在这里: // io.netty.handler.codec.http.HttpHeaders public interface HttpHeaders extends Iterable<Map.Entry<String, String>> { HttpHeaders add(String name, Object value); // ... } 您可能知道,Spring 的 WebClient 在底层使用 Project Reactor 和 Netty 来发出 Web 请求。当您创建 WebClient 实例并使用它构建请求时,标头不会立即显示。然而,一旦请求即将发出(当 Netty 的 HttpClientOperations 发挥作用时),Netty 就会添加这些默认标头(如 HOST、Accept-Encoding 等),即使您没有明确设置这些标头。 以下是 GitHub 上 Netty 的 HttpClientOperations 的部分内容: // io.netty.handler.codec.http.HttpClientOperations @Override protected void onOutboundSubscribe(Subscriber<? super ByteBuf> s) { if (!HttpRequestEncoder.encoderHeader(headers(), method(), uri())) { if (log.isDebugEnabled()) { log.debug(format(ctx.channel(), "Dropped {}"), this); } return; } //... } HttpRequestEncoder.encoderHeader(...)部分是准备和添加标头(如果标头不存在)的地方。您也可以查看 encodeHeaders 方法以获得更深入的见解。 这是 HttpClientOperations 中添加标头的时间点: // io.netty.handler.codec.http.HttpHeaders public interface HttpHeaders extends Iterable<Map.Entry<String, String>> { HttpHeaders add(String name, Object value); // ... } 不幸的是,WebClient没有提供开箱即用的解决方案来阻止Netty添加这些标头。但是,您可以创建自定义过滤器并将其添加到您的 WebClient 中,以便在每次构建请求时有意删除这些标头: WebClient.builder() .baseUrl("https://httpbin.org") .filter((clientRequest, next) -> { ClientRequest mutatedRequest = ClientRequest.from(clientRequest) .headers(httpHeaders -> { httpHeaders.remove("Host"); // remove other headers if needed }) .build(); return next.exchange(mutatedRequest); }) .build() .get() // continue with your code for .uri, etc. 这样,每次您构建请求时,过滤器都会在发送请求之前删除 Host 标头(如果您愿意,还可以删除其他标头)。请注意,这可能不是最佳实践,因为某些服务器可能需要 Host 标头或其他标头来处理请求。

回答 1 投票 0

如何对出站 HTTP 请求进行断言?

这是一个例子。它是 org.springframework.cloud.gateway.filter.WebClientHttpRoutingFilter 的修剪和简化版本: 包 com.example.gatewaydemo.misc; 导入java.net.URI; 导入j...

回答 1 投票 0

Spring r2dbc 自定义 Json 转换器不工作

我正在尝试使用 spring webflux 和 postgres sql 将 json 插入 json 列。我创建了用于读写的自定义转换器。问题是现有的 json 值会变成 null,只要

回答 3 投票 0

对于 Spring Boot Web 客户端,记录不可解析响应的首选机制是什么?

这是我的设置。我的大部分代码都通过 webflux 使用 .bodyToMono 。但是,如果发生解析错误,Webclient 没有很好的方法来获取导致问题的原始正文。在这个例子中,

回答 1 投票 0

springboot 3.1.6 webflux 跟踪丢失

我使用以下方法构建了Web客户端。 @豆 公共 XXXApiService xxxApiClient(HttpClient httpClient, WebClient.Builder 构建器) { WebClient webClient = 构建器 ...

回答 2 投票 0

Spring Web Flux 中的 ThreadLocal

我是 Spring Webflux 的新手。我正在尝试使用 spring webflux 实现 ThreadLocal。 我有一个要求,需要将标头从一个微服务传递到 webc 中的另一个微服务...

回答 2 投票 0

同步到异步http请求和响应架构

我们正在开发一个 REST 服务 (2),充当黑盒客户端 (1) 和黑盒处理器微服务 (4) 之间的适配器。 (2)和(4)使用Kafka相互通信(3) 所有组件...

回答 2 投票 0

在单个事务中保存到 Reactive Redis 和 Postgres

我希望在事务中执行对 Postgres 和 Redis 的保存,这意味着如果其中一个保存遇到错误,则另一个保存应该回滚。如何才能实现这一点...

回答 1 投票 0

Spring Boot Webflux @PrePreAuthorize 与 SpEL 保持传递空值

Spring boot 3.2.2 + Webflux 安全 我尝试通过 ReactiveMethodSecurity 构建自定义 @PreAuthorize。 此代码检查用户对“空间”的授权 @Component(value = "SpaceAcc...

回答 1 投票 0

如何在Spring Cloud Gateway中获取请求体并addHeader

我打算将一个项目从Zuul迁移到Spring Cloud Gateway。 我有一个“校验和代码”,但我不知道如何迁移它。 在 zuul 代码中,我获取了 url 参数和 json 正文,然后我执行

回答 3 投票 0

Spring boot 3 open api - 响应类中的数组字段未渲染

感谢您提前提供的帮助。 我正在使用 Spring boot webflux 3 和 Spring doc Open API 2.4 这是我的响应实体记录 公共记录 UserResponse( 整数 ID, 字符串名称,

回答 1 投票 0

无法在 Spring Boot 中使用 WebFlux 使用 H2 和 R2DBC 创建 ConnectionFactory 错误

我使用 WebFlux 反应式模块、H2 内存数据库和 R2DBC 反应式驱动程序创建了一个 Java Spring Boot 服务。 当我运行该服务时,它失败并显示“无法创建

回答 5 投票 0

当 Mono.zip 中发生错误时,Spring WebFlux 返回响应,但继续处理它们

我有一个调用其他远程服务的 REST 服务(我们称之为“主服务”)。出于性能目的,当其中一个远程调用抛出错误时,我需要主服务立即应答;布...

回答 1 投票 0

使用 ParameterizedTypeReference 的通用类型 WebClient

我调用一个 Web 服务,该服务根据我作为参数传递的字符串别名返回以下 Json, 如果别名是 isActive, 然后 json 响应 = {isActive=true} 如果别名是 RolesAlias, ...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.