首页 > 其他分享 >Spring Integration的网络通量支持

Spring Integration的网络通量支持

时间:2022-12-14 18:04:54浏览次数:49  
标签:通量 HTTP Spring WebFlux Integration integration WebFluxRequestExecutingMessageHan

Spring Integration的网络通量支持_spring

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

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

<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-webflux</artifactId>
<version>6.0.0</version>
</dependency>

在非基于 Servlet 的服务器配置的情况下,必须包含依赖关系。​​io.projectreactor.netty:reactor-netty​

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

WebFlux 命名空间支持

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

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:int="http://www.springframework.org/schema/integration"
xmlns:int-webflux="http://www.springframework.org/schema/integration/webflux"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/integration
https://www.springframework.org/schema/integration/spring-integration.xsd
http://www.springframework.org/schema/integration/webflux
https://www.springframework.org/schema/integration/webflux/spring-integration-webflux.xsd">
...
</beans>

WebFlux 入站组件

从版本 5.0 开始,提供了 的实现。 这个组件类似于基于MVC的,它通过新提取的共享一些常用选项。 它用于Spring WebFlux反应式环境(而不是MVC)。 以下示例显示了 WebFlux 端点的简单实现:​​WebFluxInboundEndpoint​​​​WebHandler​​​​HttpRequestHandlingEndpointSupport​​​​BaseHttpInboundEndpoint​

@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();
}

配置类似于(示例前面提到的),不同之处在于我们用于将 WebFlux 基础架构添加到我们的集成应用程序中。 此外,通过使用反应式 HTTP 服务器实现提供的基于按需的背压功能对下游流执行操作。​​HttpRequestHandlingEndpointSupport​​​​@EnableWebFlux​​​​WebFluxInboundEndpoint​​​​sendAndReceive​

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

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

@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();
}

有关更多可能的配置选项,请参阅请求映射支持和跨源资源共享 (CORS) 支持。

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

有效负载验证

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

WebFlux 出站组件

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

@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));
}

该操作返回 ,该 映射到 (通过使用几个步骤)作为 的输出。 与 as 一起,评估将推迟到进行下游订阅。 否则,它被视为一种模式,并且响应将适于 a 以获得来自 的异步回复。 输出消息的目标有效负载取决于配置。 或标识响应正文元素转换的目标类型。 如果设置为 ,则响应正文将转换为 a,并为每个元素提供,并将其作为有效负载发送到下游。 之后,您可以使用拆分器以反应方式迭代它。​​WebClient​​​​exchange()​​​​Mono<ClientResponse>​​​​Mono.map()​​​​AbstractIntegrationMessageBuilder​​​​WebFluxRequestExecutingMessageHandler​​​​ReactiveChannel​​​​outputChannel​​​​Mono<ClientResponse>​​​​async​​​​Mono​​​​SettableListenableFuture​​​​WebFluxRequestExecutingMessageHandler​​​​WebFluxRequestExecutingMessageHandler​​​​setExpectedResponseType(Class<?>)​​​​setExpectedResponseTypeExpression(Expression)​​​​replyPayloadToFlux​​​​true​​​​Flux​​​​expectedResponseType​​​​Flux​​​​Flux​

此外,可以注入 a 而不是 and 属性。 它可用于对正文和 HTTP 标头转换的低级访问和更多控制。 Spring 集成作为一个标识函数来生成(下游)整体和任何其他可能的自定义逻辑。​​BodyExtractor<?, ClientHttpResponse>​​​​WebFluxRequestExecutingMessageHandler​​​​expectedResponseType​​​​replyPayloadToFlux​​​​ClientHttpResponse​​​​ClientHttpResponseBodyExtractor​​​​ClientHttpResponse​

从版本 5.2 开始,支持 反应式 、 和类型作为请求消息有效负载。 在内部使用相应的 以填充到 . 当有效负载是反应式 时,已配置 或 可用于确定发布者元素类型的类型。 表达式必须解析为 ,该解析为目标或 。​​WebFluxRequestExecutingMessageHandler​​​​Publisher​​​​Resource​​​​MultiValueMap​​​​BodyInserter​​​​WebClient.RequestBodySpec​​​​Publisher​​​​publisherElementType​​​​publisherElementTypeExpression​​​​Class<?>​​​​String​​​​Class<?>​​​​ParameterizedTypeReference​

从版本 5.5 开始,公开一个标志(默认情况下)以仅返回响应正文,或返回整体作为回复消息有效负载,与提供的 or 无关。 如果 中不存在主体,则忽略此标志并返回整体。​​WebFluxRequestExecutingMessageHandler​​​​extractResponseBody​​​​true​​​​ResponseEntity​​​​expectedResponseType​​​​replyPayloadToFlux​​​​ResponseEntity​​​​ResponseEntity​

有关更多可能的配置选项,请参阅 HTTP 出站组件。

WebFlux 标头映射

由于 WebFlux 组件完全基于 HTTP 协议,因此 HTTP 标头映射没有区别。 有关用于映射标头的更多可能选项和组件,请参阅 HTTP 标头映射。

网络通量请求属性

从版本 6.0 开始,可以将 配置为通过 评估请求属性。 必须在 中计算此 SpEL 表达式。 然后将此类映射传播到 HTTP 请求配置回调。 如果需要将键值对象形式的信息从请求传递,并且下游过滤器将访问这些属性以进行进一步处理,这将很有帮助。​​WebFluxRequestExecutingMessageHandler​​​​setAttributeVariablesExpression()​​​​Map​​​​WebClient.RequestBodySpec.attributes(Consumer<Map<String, Object>> attributesConsumer)​​​​Message​

标签:通量,HTTP,Spring,WebFlux,Integration,integration,WebFluxRequestExecutingMessageHan
From: https://blog.51cto.com/u_15326439/5937965

相关文章

  • SpringMVC学习
    SpringMVC学习1.回顾MVC1.1什么是MVCMVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范。是将业务逻辑、数据、显示分离的方法来组织代码......
  • spring mvc环境之异常错误码的统一返回(十五)
    1.根据不同的请求方式,返回页面或json数据1).创建统一权限异常处理类,所有的权限异常走一个端口2).根据请求方式不同返回不同数据,页面请求返回403未授权页面,ajax请......
  • spring学习-1.使用Maven构建spring项目
    1.新建一个Maven项目​​​​​​项目的结构图​​​​2.配置pom.xml,引入项目需要的依赖,这里引入了spring,junit<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns......
  • Maven构建spring整合mybatis的项目
    1.使用Maven构建java项目,修改pom.xml文件,添加所需的依赖jar包<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:......
  • Spring Cloud Config介绍
    市场上的开源的配置中心有很多,如奇虎360的QConf、淘宝的Diamond、百度的Disconf、携程的Apollo都可解决上述提到的问题,同样地SpringCloud提供的配置中心则是SpringCloud......
  • 基于Springboot+Mybatis+mysql+vue宠物领养网站1
    @目录一、系统介绍二、功能展示1.主页(普通用户)2.登陆、注册(普通用户)3.宠物大全(普通用户)4.宠物详情(申请领养、点赞、评论)(普通用户)5.我的申请(普通用户)6.个人信息(普通用户......
  • 基于jsp+sevlet+spring+mysql实现校园疫情防控管理信息系统
    @目录一、系统介绍二、采用技术及开发环境1.开发技术2.开发环境二、功能展示1.学校疫情统计2.各情况统计3.各学院学生情况统计4.各学院教师统计5.最新时报6.后台管理四、代......
  • SpringMVC中HelloWorld实现(三)
    我机器的开发环境为:开发工具:EclipseForJavaEE;数据库:MySql5.5.35;运行环境:TomCatV7.0;JDK:JDK1.7.0_45;项目工程为:DynamicWebProject; 一、项目依赖的jar包:[ht......
  • SpringBoot入门系列:Spring Security 和 Angular JS(1)
    SpringSecurity和AngularJS系列,是一文的解析。受保护的单页面应用程序这一节我们要展示将SpringSecurity、SpringBoot和AngularJS放在一起使用的一些不错的特性,它......
  • SpringBoot入门系列:Spring Security 和 Angular JS(2)
    添加动态的内容目前我们已经有了一个应用程序,硬编码了一句问候语在里面。这对学习如何把这些凑到一起很有帮助,不过实际上我们期望的是来自于后台服务器的内容,因此我们可以创......