Spring集成–配置Web服务客户端超时

介绍

在Spring Integration的支持下,您的应用程序可以使用出站Web服务网关来调用Web服务。 调用由该网关处理,因此您只需要担心构建请求消息和处理响应。 但是,使用这种方法并不明显,如何配置其他选项,例如设置超时或操作缓存。 本文将展示如何设置客户端超时并将其与网关集成。

本文分为以下几节:

  1. 介绍。
  2. Web服务调用概述。
  3. 配置消息发件人。
  4. 示例应用程序。
  5. 结论。
  • 源代码可以在github上找到。

Web服务调用概述

Web服务出站网关将Web服务调用委托给Spring Web Services WebServiceTemplate 。 当消息到达出站网关时,此模板使用消息发件人以创建新连接。 下图显示了该流程的概述:

整数超时序列

默认情况下,Web服务模板将HttpUrlConnectionMessageSender设置为其消息发送者,这是不支持配置选项的基本实现。 但是,可以通过设置具有设置读取和连接超时能力的更高级的消息发送者来覆盖此行为。

我们将在下一部分中配置消息发送者。

配置消息发件人

我们将配置消息发件人到出站网关。 这样,网关将使用提供的模板设置模板的消息发送者。

我们在示例中提供的实现是HttpComponentsMessageSender类,该类也来自Spring Web Services项目。 该消息发件人允许我们定义以下超时:

  • connectionTimeout :设置建立连接之前的超时。
  • readTimeout :设置基础HttpClient的套接字超时。 这是服务回复所需的时间。

组态:

<bean id="messageSender" class="org.springframework.ws.transport.http.HttpComponentsMessageSender"><property name="connectionTimeout" value="${timeout.connection}"/><property name="readTimeout" value="${timeout.read}"/>
</bean>

属性文件包含两个值,它们都设置为两秒钟:

timeout.connection = 2000

timeout.read = 2000

配置完成后,我们将其添加到Web服务出站网关配置中:

<int-ws:outbound-gateway uri="http://localhost:8080/spring-ws-courses/courses" marshaller="marshaller" unmarshaller="marshaller" request-channel="requestChannel" message-sender="messageSender"/>

要使用此消息发件人,您将需要添加以下依赖项:

<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.3.3</version>
</dependency>

就是这样; 下一部分将显示示例应用程序以查看其工作方式。

样例应用

流程很简单; 它包含一个向Web服务发送请求并接收响应的应用程序。 Web服务源代码可以在github上找到。

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:int="http://www.springframework.org/schema/integration"xmlns:int-ws="http://www.springframework.org/schema/integration/ws"xmlns:oxm="http://www.springframework.org/schema/oxm"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsdhttp://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsdhttp://www.springframework.org/schema/integration/ws http://www.springframework.org/schema/integration/ws/spring-integration-ws.xsdhttp://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm-3.0.xsd"><context:component-scan base-package="xpadro.spring.integration.ws"/><context:property-placeholder location="classpath:props/service.properties"/><!-- System entry --><int:gateway id="systemEntry" default-request-channel="requestChannel" service-interface="xpadro.spring.integration.ws.gateway.CourseService"/><!-- Web service invocation --><int-ws:outbound-gateway uri="http://localhost:8080/spring-ws-courses/courses" marshaller="marshaller" unmarshaller="marshaller" request-channel="requestChannel" message-sender="messageSender"/><oxm:jaxb2-marshaller id="marshaller" contextPath="xpadro.spring.integration.ws.types" /><bean id="messageSender" class="org.springframework.ws.transport.http.HttpComponentsMessageSender"><property name="connectionTimeout" value="${timeout.connection}"/><property name="readTimeout" value="${timeout.read}"/></bean></beans>

网关包含我们将进入消息传递系统的方法:

public interface CourseService {@GatewayGetCourseResponse getCourse(GetCourseRequest request);
}

最后,测试:

@ContextConfiguration(locations = {"/xpadro/spring/integration/ws/config/int-course-config.xml"})
@RunWith(SpringJUnit4ClassRunner.class)
public class TestIntegrationApp {@Autowiredprivate CourseService service;@Testpublic void invokeNormalOperation() {GetCourseRequest request = new GetCourseRequest();request.setCourseId("BC-45");GetCourseResponse response = service.getCourse(request);assertNotNull(response);assertEquals("Introduction to Java", response.getName());}@Testpublic void invokeTimeoutOperation() {try {GetCourseRequest request = new GetCourseRequest();request.setCourseId("DF-21");GetCourseResponse response = service.getCourse(request);assertNull(response);} catch (WebServiceIOException e) {assertTrue(e.getCause() instanceof SocketTimeoutException);}}
}

结论

我们已经学习了如何为Web服务出站网关设置其他选项以建立超时。 在下一篇文章中,我将解释如何缓存此调用。

翻译自: https://www.javacodegeeks.com/2014/05/spring-integration-configure-web-service-client-timeout.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/364104.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Number()、parseInt()、parseFloat()的区别

Number()&#xff1a; Number()的强制类型转换与parseInt()和parseFloat()方法的处理方式相似&#xff0c;只是它转换的是整个值&#xff0c;而不是部分值&#xff0c;如果有无效字符&#xff0c;该方法将返回NaN。 例如如果要把字符串 "12.34 "转换成整数&#xf…

将一幅图像取平均值缩小N倍实现方法

/// <summary>/// 将图像缩小N倍/// </summary>/// <param name"source">原图数据</param>/// <param name"height">原图高度</param>/// <param name"width">原图宽度</param>/// <param n…

将txt文件和excel文件导入SQL2000数据库

在做一些web数据库管理系统的时候经常要实现将帐户批量注册的功能&#xff0c;今天就来讲讲如何在C#-web项目中将txt文件和excel文件导入SQL2000数据库。1.数据库准备在SQL2000数据库的实例数据库pubs中建立一个数据表txtInsert&#xff0c;字段很简单&#xff1a;id&#xff0…

Linux ifconfig 配置网络接口

Linux ifconfig 可以用来配置网络接口的IP地址、掩码、网关、物理地址等&#xff1b;值得一说的是用Linux ifconfig 为网卡指定IP地址&#xff0c;这只是用来调试网络用的&#xff0c;并不会更改系统关于网卡的配置文件。 如果您想把网络接口的IP地址固定下来&#xff0c;目前有…

Java 8 Friday:Java 8将彻底改变数据库访问

在Data Geekery &#xff0c;我们喜欢Java。 而且&#xff0c;由于我们真的很喜欢jOOQ的流畅的API和查询DSL &#xff0c;我们对Java 8将为我们的生态系统带来什么感到非常兴奋。 对于Java 8系列 &#xff0c;我们很荣幸主持Iu Ming-Yee Iu博士发表的非常相关的嘉宾帖子。 Iu …

WebUploader点击上传文件选择框会延迟几秒才会显示

1 accept: { 2 title: Images, 3 extensions: jpg,jpeg,png, 4 mimeTypes: image/* 5 } 改为 1 accept: { 2 title: Images, 3 extensions: jpg,jpeg,png, 4 mimeTypes: image/jpg,image/jpeg,image/png //修改这行 5 } 更多专业前端知识&#xff0c;请…

Linux文件权限管理

权限管理 1、权限解读 权限&#xff1a;用户针对文件是否有读、写、执行的权利。 权限划分&#xff1a;读&#xff08;Read&#xff09;、写&#xff08;Write&#xff09;、执行&#xff08;eXecute&#xff09; 权限针对用户的划分&#xff1a;主人&#xff08;User&#xff…

Sqoop数据迁移工具的使用

文章作者&#xff1a;foochane 原文链接&#xff1a;https://foochane.cn/article/2019063001.html Sqoop数据迁移工具的使用 sqoop简单介绍 sqoop数据到HDFS/HIVE sqoop数据到MySQL 1 sqoop简单介绍 sqoop是apache旗下一款“Hadoop和关系数据库服务器之间传送数据”的工具。用…

Spring 3.2矩阵变量是什么? –第2部分:代码

关于Spring对Matrix Variables的支持&#xff0c;我最近的博客集中在解释它们是什么以及为什么要使用它们。 整理了内容和原因之后 &#xff0c;此博客全面介绍了如何以及如何使用它们。 我还给出了几个Matrix URI的示例&#xff0c;因此&#xff0c;演示一些处理几个URI的代码…

java中io.nio.aio_Java中网络IO的实现方式-BIO、NIO、AIO

在网络编程中&#xff0c;接触到最多的就是利用Socket进行网络通信开发。在Java中主要是以下三种实现方式BIO、NIO、AIO。关于这三个概念的辨析以前一直都是好像懂&#xff0c;但是表达的不是很清楚&#xff0c;下面做个总结完全辨析清楚。1. BIO方式首先我用一个较为通俗的语言…

CentOS 中 配置 Nginx 支持 https

一、基础设置&#xff1a; 1、yum -y update 2、yum -y install openssl* 3、cd /usr/local/nginx/conf 4、mkdir ./ssl 5、cd ./ssl  # 在ssl目录下用openssl创建 .key 私钥文件和 .crt 证书文件 6、openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout www.usha…

小a与黄金街道(欧拉函数,快速幂)

链接&#xff1a;https://ac.nowcoder.com/acm/contest/317/D来源&#xff1a;牛客网 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒空间限制&#xff1a;C/C 32768K&#xff0c;其他语言65536K64bit IO Format: %lld题目描述 小a和小b来到了一条布满了黄金的街道上。它…

呼叫中心资料

概念&#xff1a;呼叫中心是利用现代通信手段集中处理与客户关系的交互过程的机构。组成&#xff1a; 交换机(PBX)排队机(ACD)计算机电话集成(CTI)交互式语音应答(IVR)来话呼叫管理去话呼叫管理业务计费系统监控系统管理/统计系统客户关系管理(CRM)系统帮助台多种应用服务器&a…

如何在Play Framework 2中实现会话超时

如果您遵循Play Framework 2指南以实施身份验证&#xff1a; http://www.playframework.com/doc-m-e-t-t-i o / n..2..2..2 / Jac agide4-您会注意到Play框架2中没有会话超时。在Play框架1中存在&#xff0c;但Play框架2采用了不同的方法。 我要实现自己的会话超时&#xff0c…

C++中this指针

由类生成对象时&#xff0c;对象中只保存私有数据。 因为由一个类生成的所有对象为其数据服务的方法都是相同的&#xff0c;因此&#xff0c;一个类中的方法是大家所共用的。 而这就牵扯到当对象A调用方法时&#xff0c;如何保证该方法操作的数据是对象A的数据。 #include<i…

jfinal java搭建_Eclipse快速搭建Jfinal web应用 (一)

JFinal简介JFinal 是基于 Java 语言的极速 WEB ORM 框架&#xff0c;其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。在拥有Java语言所有优势的同时再拥有ruby、python、php等动态语言的开发效率&#xff01;为您节约更多时间&#xff0c…

PHP后台处理jQuery Ajax跨域请求问题 — xx was not called解决办法

// 前台代码 $.ajax({url: http://www.ushark.net/home/save_trial_apply,dataType: jsonp,processData: false,data: $(.layui-layer-content #trialFormInfo).serialize(), }) .done(function(data) {layer.msg(申请成功); }) .fail(function(jqXHR, textStatus, errorThrown…

[转]JavaScript面向对象的特性

如果你使用JavaScript编程&#xff0c;你或许会怀疑它是否包含了面向对象&#xff08;OO&#xff09;的结构。实际上&#xff0c;JavaScript的确支持面向对象的架构――在某种程度上。本文将通过一个可扩展向量图形&#xff08;SVG&#xff09;的实例来说明JavaScript的OO结构。…

命令行获取docker远程仓库镜像列表

命令行获取docker远程仓库镜像列表 获取思路 通过curl获取镜像tag的json串,解析后得到${image}:${tag}的格式 curl获取示例 # curl [:-s] ${API}/${image}/tags curl https://registry.hub.docker.com/v1/repositories/nginx/tags 获取脚本docker-search docker-search.sh #!/b…

如何使用VisualVM监视服务器上的多个JVM

在上一篇文章中&#xff0c;我向您展示了如何使用单个管理员服务器和多个托管服务器启动WebLogic Server。 这些启动之后&#xff0c;您如何检查它们的健康状况&#xff1f; 您可以使用管理员的/ console网络应用。 但是&#xff0c;所有默认的Oracle / Open JDK 6附带的另一个…