• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Spring Integration的网络通量支持

武飞扬头像
ev846815793
帮助1

WebFlux Spring 集成模块 () 允许以反应方式执行 HTTP 请求和处理入站 HTTP 请求。spring-integration-webflux

您需要将此依赖项包含在项目中:

org.springframework.integration spring-integration-webflux 6.0.0 1. 2. 3. 4. 5. 在非基于 Servlet 的服务器配置的情况下,必须包含依赖关系。io.projectreactor.netty:reactor-netty

WebFlux 支持由以下网关实现组成:和 。 该支持完全基于Spring WebFlux和Project Actor基础。 有关详细信息,请参阅 HTTP 支持,因为许多选项在反应式和常规 HTTP 组件之间共享。WebFluxInboundEndpointWebFluxRequestExecutingMessageHandler

WebFlux 命名空间支持
Spring 集成提供了一个命名空间和相应的模式定义。 若要将其包含在配置中,请在应用程序上下文配置文件中添加以下命名空间声明:webflux

<?xml version="1.0" encoding="UTF-8"?>




1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
WebFlux 入站组件
从版本 5.0 开始,提供了 的实现。 这个组件类似于基于MVC的,它通过新提取的共享一些常用选项。 它用于Spring WebFlux反应式环境(而不是MVC)。 以下示例显示了 WebFlux 端点的简单实现:WebFluxInboundEndpointWebHandlerHttpRequestHandlingEndpointSupportBaseHttpInboundEndpoint

@Bean
public IntegrationFlow inboundChannelAdapterFlow() {
return IntegrationFlow
.from(WebFlux.inboundChannelAdapter(“/reactivePost”)
.requestMapping(m -> m.methods(HttpMethod.POST))
.requestPayloadType(ResolvableType.forClassWithGenerics(Flux.class, String.class))
.statusCodeFunction(m -> HttpStatus.ACCEPTED))
.channel(c -> c.queue(“storeChannel”))
.get();
}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
配置类似于(示例前面提到的),不同之处在于我们用于将 WebFlux 基础架构添加到我们的集成应用程序中。 此外,通过使用反应式 HTTP 服务器实现提供的基于按需的背压功能对下游流执行操作。HttpRequestHandlingEndpointSupport@EnableWebFluxWebFluxInboundEndpointsendAndReceive

回复部分也是非阻塞的,并且基于内部 ,该部分平面映射到按需解决的回复。FutureReplyChannelMono

您可以使用自定义、 甚至 . 后者提供了一种机制,可用于将回复作为任何响应式类型返回:Reactor 、RxJava 等。 这样,我们就可以使用 Spring 集成组件实现服务器发送事件场景,如以下示例所示:WebFluxInboundEndpointServerCodecConfigurerRequestedContentTypeResolverReactiveAdapterRegistryFluxObservableFlowable

@Bean
public IntegrationFlow sseFlow() {
return IntegrationFlow
.from(WebFlux.inboundGateway(“/sse”)
.requestMapping(m -> m.produces(MediaType.TEXT_EVENT_STREAM_VALUE)))
.handle((p, h) -> Flux.just(“foo”, “bar”, “baz”))
.get();
}
1.
2.
3.
4.
5.
6.
7.
8.
有关更多可能的配置选项,请参阅请求映射支持和跨源资源共享 (CORS) 支持。

当请求正文为空或返回 时,请求参数 () 用于处理目标消息的 。payloadExpressionnullMultiValueMap<String, String>payload

有效负载验证
从版本 5.2 开始,可以使用 . 与 HTTP 支持中的 MVC 验证不同,它用于在执行回退和函数之前验证请求已转换为的元素。 框架无法假设对象在构建最终有效负载后会有多复杂。 如果需要限制最终有效负载(或其元素)的验证可见性,则应将验证转移到下游,而不是 WebFlux 端点。 更多信息请参阅Spring WebFlux文档。 无效的有效负载被拒绝,并显示包含所有验证的(扩展名)。 在 Spring 框架参考手册中查看有关验证的更多信息。WebFluxInboundEndpointValidatorPublisherHttpMessageReaderpayloadExpressionPublisherPublisherIntegrationWebExchangeBindExceptionWebExchangeBindExceptionErrors

WebFlux 出站组件
(从版本 5.0 开始)实现类似于 。 它使用来自Spring Framework WebFlux模块。 要配置它,请定义类似于以下内容的 Bean:WebFluxRequestExecutingMessageHandlerHttpRequestExecutingMessageHandlerWebClient

登录后复制
@Bean
public IntegrationFlow outboundReactive() {
return f -> f
.handle(WebFlux.<MultiValueMap<String, String>>outboundGateway(m ->
UriComponentsBuilder.fromUriString(“http://localhost:8080/foo”)
.queryParams(m.getPayload())
.build()
.toUri())
.httpMethod(HttpMethod.GET)
.expectedResponseType(String.class));
}

©著作权归作者所有:来自51CTO博客作者Spring_Learnin的原创作品,请联系作者获取转载授权,否则将追究法律责任
Spring Integration的网络通量支持
https://blog.51cto.com/u_15326439/5937965

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgcceai
系列文章
更多 icon
同类精品
更多 icon
继续加载