spring-webflux 相关问题

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

如何保持 Spring Webflux WebSocket 的活力

我正在研究 spring web-flux 反应式 WebSocket ,所以我试图模拟一个双向文本通信通道,通过它我可以发送和接收消息,我成功了......

回答 1 投票 0


记录所有响应和请求 spring webflux

我想向我的项目添加日志记录,我使用 webFilter 来添加日志。 我想记录请求标头(身份验证标头除外)、请求方法和响应代码我将此代码添加到我的项目中: @Com...

回答 1 投票 0

为 Spring Web 客户端默认指标添加标签

我目前正在开发一个 Spring webflux 项目,该项目具有 Actuator、Micrometer 依赖项,如下所示, io.千分尺 我目前正在开发一个 Spring webflux 项目,该项目具有 Actuator、Micrometer 依赖项,如下所示, <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-core</artifactId> </dependency> 公开默认指标(包括 Spring webClient 指标)。我有 4 个不同的端点,我使用 Spring WebClient 调用它们。我想知道是否有一种方法可以为每个添加到默认指标的 Web 客户端调用添加特定标签。我有一些指标,例如来自 Webclient 的 Histogram,在 /actuator/prometheus 端点公开,如下, http_client_requests_seconds_bucket{clientName="my-app.com",method="GET",outcome="SUCCESS",status="200",uri="/shops",le="0.001048576",} 0.0 http_client_requests_seconds_bucket{clientName="my-app.com",method="GET",outcome="SUCCESS",status="200",uri="/shops",le="0.002088576",} 1.0 在我的代码中,我想在 Webclient 调用中添加一些额外的标签,以实现上述所有指标。例如这样的事情, http_client_requests_seconds_bucket{clientName="my-app.com",method="GET",outcome="SUCCESS",status="200",uri="/shops",le="0.001048576",investor="A", version="v1"} 0.0 http_client_requests_seconds_bucket{clientName="my-app.com",method="GET",outcome="SUCCESS",status="200",uri="/shops",le="0.002088576",investor="A", version="v1"} 1.0 注意我添加的 2 个自定义标签 investor="A"、version="v1"。我正在寻找一些可能看起来像这样的代码, @Autowire private WebClient webclient; // Assume there is already a bean created for us public Mono<String> getShopsList(String... extraTags) { return webclient.baseUrl("http://my-app.com") .build() .get() .uri("/shops") .tags(extraTags) // Some extra tags I want callers of the method to pass. Note there are only 4-5 methods that call "getShopsList()" method .retrieve() .bodyToMono(String.class); } 有人可以帮忙找到实现这一目标的最佳方法吗? 预期的方法是引入您的自定义标签提供程序: @Component public class CustomWebClientExchangeTagsProvider extends DefaultWebClientExchangeTagsProvider { public static final String VERSION_ATTRIBUTE = "custom.webclient.version"; public static final String INVESTOR_ATTRIBUTE = "custom.webclient.investor"; @Override public Iterable<Tag> tags(ClientRequest request, ClientResponse response, Throwable throwable) { Tag method = WebClientExchangeTags.method(request); Tag investor = getInvestorTag(request); Tag version = getVersionTag(request); return asList(method, investor, version, WebClientExchangeTags.status(response, throwable), WebClientExchangeTags.outcome(response)); } private Tag getInvestorTag(ClientRequest request) { return request.attribute(INVESTOR_ATTRIBUTE) .map(name -> Tag.of("investor", (String) name)) .orElse(WebClientExchangeTags.clientName(request)); } private Tag getVersionTag(ClientRequest request) { return request.attribute(VERSION_ATTRIBUTE) .map(uri -> Tag.of("version", (String) uri)) .orElse(WebClientExchangeTags.uri(request)); } } 您必须以这种方式检测您的自定义 Web 客户端: @Bean public WebClient webClient(MetricsWebClientCustomizer metricsCustomizer) { TcpClient timeoutClient = ... WebClient.Builder builder = WebClient.builder(); metricsCustomizer.customize(builder); return ...; } 最后,你需要像这样设置两个属性: return webClient.get() .uri(filePath) .attribute(INVESTOR_ATTRIBUTE, "A") .attribute(VERSION_ATTRIBUTE, "v1") .retrieve() .bodyToMono(String.class); 结果示例: http_client_requests_seconds_count{investor="A",method="GET",outcome="CLIENT_ERROR",status="401",version="v1",} 1.0 http_client_requests_seconds_sum{investor="A",method="GET",outcome="CLIENT_ERROR",status="401",version="v1",} 0.073818807 编辑 根据文档: S 属性(消费者>属性消费者) 提供对迄今为止声明的每个属性的访问 可以添加、替换或删除值。 所以是的,您可以使用它来添加多个属性。 上面的答案在 Spring Boot 3.2.x 中不再有效,因为 DefaultWebClientExchangeTagsProvider 已被删除。删除说明上写着“在 3.2.0 中删除,以支持 ClientRequestObservationConvention”,但我不知道应如何使用新接口才能获得相同的结果?

回答 2 投票 0

手动停止服务器时,WebClientResponseException 返回 200 HTTP 状态代码

目前,我正在尝试使用 Flux 通过 WebClient 从服务器端获取消息。我想检查是否可以处理非 2xx HTTP 状态情况的异常。在接收消息期间我停止...

回答 2 投票 0

项目reactor或spring webflux如何正确获取serverwebexchange对象?

我正在尝试构建类似 threadlocal 的东西,但适用于 webflux。我的问题是上下文或 serverwebexchange 对象如何从一个类传递到另一个类(过滤器、控制器、服务...

回答 1 投票 0

从反应性 mongo 源获得无限通量

ReactiveMongoTemplate 的 find() 方法开箱即用,将返回与查询匹配的数据 Flux。一旦到达查询结果的末尾,它就会完成。 我想保留这个流感...

回答 1 投票 0

进行阻塞(同步)API 调用

我的项目完全是一个同步Web应用程序,我尝试使用netty服务器来节省资源,因为它对每个请求使用事件循环。 现在我的要求是进行同步(阻塞)

回答 1 投票 0

使用 WebClient + Spring Boot WebFlux + Netty 服务器进行阻塞(同步)API 调用

我的项目完全是一个同步Web应用程序,我尝试使用netty服务器来节省资源,因为它对每个请求使用事件循环。 现在我的要求是进行同步(阻塞)

回答 1 投票 0

Spring Cloud Gateway 访问Principal

这个问题与我对webflux缺乏了解有关...... 创建全局 Spring Cloud Gateway 过滤器时,例如 公共类 MyGlobalFilter 实现 GlobalFilter { @覆盖 公共单声道<

回答 1 投票 0

Spring GraphQL 服务器关闭 websocket 连接:4400 无效消息(适用于 Graphiql)

我正在研究 Spring 服务器和 Next.js 客户端之间的 GraphQL 通信。最近我更改了服务器的 GraphQL 依赖项(我正在转换为 WebFlux),这就是我的订阅

回答 1 投票 0

创建能够在未来发布任意事件的 Flux

我想创建一个自定义 Flux,能够在将来发布任意事件。 例如: @RestController 公共类事件控制器{ @GetMapping(path = "/event/stream", 产生...

回答 1 投票 0

创建能够发布任意事件的通量

我想创建一个自定义 Flux,能够在将来发布任意事件。 例如: @RestController 公共类事件控制器{ @GetMapping(path = "/event/stream", 产生...

回答 1 投票 0

如何在 WebFlux 中访问用于 Spring Data 审计的 http 标头

我正在尝试利用http标头来审核我的Spring存储库,如此处所述https://docs.spring.io/spring-data/commons/docs/current/reference/html/#auditing.reactive -审计意识 但是

回答 2 投票 0

我正在尝试根据 H2 数据库中的数据实现 Spring Security 身份验证

当我创建这样的用户时,我正在尝试设置基本身份验证(用户名和密码): @豆 公共 InMemoryUserDetailsManager inMemoryUserDetailsManager() { 用户详细信息...

回答 1 投票 0

Spring Cloud Sleuth 到 Micrometer 跟踪迁移 (SB 2.7 -> 3.1.x) - 无 Trace_ID (Otel)

对于整个可观测性生态系统来说是全新的,我正在尝试将给定项目从 sleuth 迁移到 Micrometer Tracing。 假设我目前正在使用一种简单的休息通话方法 ->

回答 1 投票 0


使用 Mockk 模拟 bean 在 Spring 项目中失败了

这是一个非 Spring Boot 项目。 我尝试使用 mockk() 在控制器测试中模拟 bean,但失败了。 PostController依赖于bean PostRepository,这里尝试使用mock() bean来模拟...

回答 1 投票 0

默认使用 Unconfined Dispatcher 的控制器代码

我的 spring-webflux 应用程序中有一个简单的控制器,如下所示, @GetMapping("/ping") 暂停 fun ping(): ResponseEntity> { 打印(

回答 1 投票 0

HTTPClient 推荐

我创建了一个 Webclient 定制器,它使用自定义 ConnectionProvider 创建 HTTPClient @豆 WebClientCustomizer webClientCustomizer(CustomizedWebClientProperties 属性) {

回答 1 投票 0

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