Java网络编程教程之设置请求超时的方法

 更新时间:2017年12月18日 10:33:28   作者:iamgeektao  
这篇文章主要给大家介绍了关于Java网络编程教程之设置请求超时的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

一、引言

随着企业系统的发展,应用多采用分布式结构,严重依赖于网络的稳定性。但由于网络天生的不稳定性,系统开发过程中需要考虑网络不稳定情况下如何保证应用的鲁棒性。 设置网络超时是其中一种保证应用健壮性的手段。 设置网络超时设置后,请求在设定时间能未完成将被强制终止,保证程序不出现无限制的线程阻塞情况,有效的提高了应用的可用性。

下面话不多说了,来一起看看详细的介绍吧。

二、未设置超时与设置超时情况对比

1. 网络请求图例:

网络请求超时案例

2. 设置超时时间后,请求图例:

网络请求超时案例-设置超时

三、常见的网络超时设置

1. httpclient超时设置(Spring bean)

配置

 <bean id="multiThreadedHttpConnectionManager" class="org.apache.commons.httpclient.MultiThreadedHttpConnectionManager">
 <property name="params">
  <bean  class="org.apache.commons.httpclient.params.HttpConnectionManagerParams">
  <property name="maxTotalConnections" value="${maxTotalConnections:300}" />
  <property name="defaultMaxConnectionsPerHost" value="${defaultMaxConnectionsPerHost:300}" />
  <!-- 连接超时,毫秒。 -->
  <property name="connectionTimeout" value="${connectTimeout:10000}" />
  <!-- socket超时,毫秒。 -->
  <property name="soTimeout" value="${readTimeout:600000}" />
  <property name="staleCheckingEnabled" value="${staleCheckingEnabled:true}" />
  </bean>
 </property>
 </bean> 
 <bean id="httpClient" class="org.apache.commons.httpclient.HttpClient">
 <constructor-arg>
  <ref bean="multiThreadedHttpConnectionManager" />
 </constructor-arg>
 </bean>

httpinvoker使用场景

配置HttpInvokerRequestExecutor,覆盖HttpInvokerProxyFactoryBean中默认使用的的SimpleHttpInvokerRequestExecutor,并配置网络超时。见《配置》。

 <bean id="httpInvokerRequestExecutor"  class="org.springframework.remoting.httpinvoker.CommonsHttpInvokerRequestExecutor">
  <constructor-arg>
  <ref bean="httpClient" />
  </constructor-arg>
 </bean> 
 <bean id="xxxxService"  class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
  <property name="serviceUrl" value="${xxxxServiceUrl}" />
  <property name="serviceInterface" value="com.xxxxService" />
  <property name="httpInvokerRequestExecutor" ref="httpInvokerRequestExecutor" />
 </bean>

2. HttpClient超时设置(硬编码)

样例

 RequestConfig config = RequestConfig.custom()
  .setSocketTimeout(1*1000) // socket套接字超时,毫秒。
  .setConnectionRequestTimeout(1*1000) //使用连接池来管理连接时,从连接池获取连接的超时时间,毫秒。
  .setConnectTimeout(5*1000) // 连接建立超时,毫秒。
  .build();
 CloseableHttpClient httpClient = HttpClients.custom()
  .setDefaultRequestConfig(config) //
  .build();
 CloseableHttpResponse httpResponse = httpClient.execute(httpGet); // 执行请求

3. 邮件超时设置

基于Spring框架开发的项目可以很方便的使用
org.springframework.mail.javamail.JavaMailSenderImpl实现邮件提醒等功能。

配置

 <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"
 p:host="${mailSender.host}" p:username="${mailSender.username}"
 p:password="${mailSender.password}">
 <property name="javaMailProperties">
  <props>
  <prop key="mail.smtp.auth">${mailSender.smtp.auth:true}
  </prop>
  <prop key="mail.smtp.timeout">${mailSender.smtp.timeout:10000}
  </prop>
  <prop key="mail.smtp.connectiontimeout">${mailSender.smtp.connectiontimeout:10000}
  </prop>
  </props>
 </property>
 </bean>

javaMailProperties说明

  • mail.smtp.timeout : smtp邮件服务器读取超时。
  • mail.smtp.connectiontimeout : smtp邮件服务器连接超时。
  • mail.smtp.auth : 是否认证用户。

注: property参数名列表可查询JavaMail API documentation。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

参考

相关文章

  • SpringBoot利用@Retryable注解实现接口重试

    SpringBoot利用@Retryable注解实现接口重试

    本文主要介绍了springboot如何利用@Retryable注解实现接口重试功能,文中示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • jvm细节探索之synchronized及实现问题分析

    jvm细节探索之synchronized及实现问题分析

    这篇文章主要介绍了jvm细节探索之synchronized及实现问题分析,涉及synchronized的字节码表示,JVM中锁的优化,对象头的介绍等相关内容,具有一定借鉴价值,需要的朋友可以参考下。
    2017-11-11
  • 关于后端如何解决跨域的问题说明

    关于后端如何解决跨域的问题说明

    这篇文章主要介绍了关于后端如何解决跨域的问题说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • 多模字符串匹配算法原理及Java实现代码

    多模字符串匹配算法原理及Java实现代码

    这篇文章主要介绍了多模字符串匹配算法原理及Java实现代码,涉及算法背景,原理,构建过程简单介绍几Java代码实现等相关内容,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • Java实现简易图书借阅系统

    Java实现简易图书借阅系统

    这篇文章主要为大家详细介绍了Java实现简易图书借阅系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • SpringBoot实现在webapp下直接访问html,jsp

    SpringBoot实现在webapp下直接访问html,jsp

    这篇文章主要介绍了SpringBoot实现在webapp下直接访问html,jsp问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • Spring DATA JPA 中findAll 进行OrderBy方式

    Spring DATA JPA 中findAll 进行OrderBy方式

    这篇文章主要介绍了Spring DATA JPA 中findAll 进行OrderBy方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • 关于weblogic部署Java项目的包冲突问题的解决

    关于weblogic部署Java项目的包冲突问题的解决

    这篇文章主要介绍了关于weblogic部署Java项目的包冲突问题的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • Springboot处理CORS跨域请求的三种方法

    Springboot处理CORS跨域请求的三种方法

    这篇文章主要介绍了Springboot处理CORS跨域请求的三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • RabbitMQ之消息的可靠性方案详解

    RabbitMQ之消息的可靠性方案详解

    这篇文章主要介绍了RabbitMQ之消息的可靠性方案详解,MQ 消息数据完整的链路为:从 Producer 发送消息到 RabbitMQ 服务器中,再由 Broker 服务的 Exchange 根据 Routing_Key 路由到指定的 Queue 队列中,最后投送到消费者中完成消费,需要的朋友可以参考下
    2023-08-08

最新评论