先说一下具体的原因:
数据交互中,其中一方单独认为业务交互失败,逻辑回收而非物理关闭复用的信道,另一方在完成业务操作时将业务数据再次推送到已经被逻辑回收的通道上,会导致请求和相应错位。
代码层设计问题:
1. 信道一次业务交互中的多次消息交互缺少唯一的会话码,导致中间任何一次交互出现问题,后续的数据会错位到后续复用此信道其他请求中。
2. 底层信道的回收,异常处理,没有在信道层直接处理,而是将错误通过业务堆栈抛到最外层ajp协议解析线程管理池去做,导致不论是业务捕获异常或者是servlet,spring框架捕获异常都会出现串号。
解决方法:
1. 在协议层增加会话码,发现会话错位,关闭信道。
2. 让底层信道出现异常自己回收和关闭信道,连接池获取连接的时候判断连接是否已经无效,无效即刻移除。(不需要用抛错误堆栈的方式来实现)
后续:
TOP这边已经在考虑异步Web request请求处理的方式,后续在安全的要求下可以和nginx 做类似信道复用的web服务器+应用服务器的模式。
详细说明看下面的内容:
用两张图片说明问题。
第一张是一次请求在JK和Jboss-web之间的交互过程。
问题发生在第四步,在jboss-web向JK请求body的数据的时候可能产生超时或者其他IO异常,这时候直接会走到9这步,由于异常被捕获,连接将不会被物理关闭。
一次请求处理的调用顺序如上,按照数字顺序,当在5出现问题的时候,AjpAprProcessor没有自己物理关闭,而是依赖异常上抛的方式,返回到ajpAprProtocal来关闭AjpAprProcessor。简单来做就只需要在5就地处理,关闭连接,虽然会被放入连接池,但是只要在2这个步骤使用连接池的时候检查一下连接状态就可以丢弃这些无效的连接。
<!--
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
<rdf:Description
rdf:about="http://confluence.taobao.ali.com:8080/pages/viewpage.action?pageId=153452738"
dc:identifier="http://confluence.taobao.ali.com:8080/pages/viewpage.action?pageId=153452738"
dc:title="串号问题"
trackback:ping="http://confluence.taobao.ali.com:8080/rpc/trackback/153452738" />
</rdf:RDF>
--><!--
Root decorator: all decisions about how a page is to be decorated via the
inline decoration begins here.
--><!--
Switch based upon the context. However, for now, just delegate to a decorator
identified directly by the context.
-->
分享到:
相关推荐
文档是介绍基于apache和modjk在jboss下实现负载均衡。
apache jboss 集群问题,集群后出现异常,收集资料!
jdk1.6与jboss5.x冲突问题的解决方法
jboss常用问题解决,提供了基本的jboss日常的一些错误的解决方案。对于jboss经常出现的问题进行了解析。
资源名称:JBoss 管理与开发核心技术:第三版内容简介:本书的主要目的是从配置和架构这两个角度弄清楚标准JBoss 3.2.x的架构组件。使用JBoss的开发者将理解如何配置标准的组件。其中,需要开发者注意的是,本书不是...
帮你设置jboss安全性问题。Jboss安全设置 jboss安全性 jboss设置安全性Jboss安全设置 jboss安全性 jboss设置安全性
JBOSS,JBoss安装部署 JBOSS,JBoss安装部署
JBoss完全实现了J2EE的服务栈: EJB (Enterprise JavaBeans) JMS (Java Message Service) JTS/JTA (Java Transaction Service / Java Transaction API) Servlet and JSP (JavaServer Pages) JNDI (Java Naming and ...
JBoss启动JBoss启动JBoss启动JBoss启动JBoss启动JBoss启动JBoss启动JBoss启动 JBoss启动
JavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-...
jboss eap 6.2或as 7 以上乱码问题解决
JBoss 管理与开发核心技术.pdf
JBoss下载与JBoss安装 jboss初学者可以看看
如果发现log4f与jboss出现冲突,将文件放到WEB-INF文件下可解决问题
JBOSS使用指南JBOSS使用指南JBOSS使用指南JBOSS使用指南JBOSS使用指南JBOSS使用指南JBOSS使用指南JBOSS使用指南
jboss 下载(httpwww.jboss.org)
这个PPT主要介绍给的是Jboss负载均衡.
JBoss安装与搭建.doc
某大牛写的jboss-exp 1. 查看系统名称 java -jar jboss_exploit_fat.jar -i http://192.168.7.84:10081/invoker/JMXInvokerServlet get jboss.system:type=ServerInfo OSName 2. 查看系统版本 java -jar jboss_...