先说一下具体的原因:
数据交互中,其中一方单独认为业务交互失败,逻辑回收而非物理关闭复用的信道,另一方在完成业务操作时将业务数据再次推送到已经被逻辑回收的通道上,会导致请求和相应错位。
代码层设计问题:
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下实现负载均衡。
标题中的“jdk1.6与jboss5.x冲突问题的解决方法”指的是在使用Java Development Kit(JDK)1.6版本与JBoss Application Server 5.x版本进行集成时可能出现的兼容性问题。JBoss AS是一款开源的企业级Java应用程序...
### Apache与Jboss负载均衡教程知识点详解 #### JBoss负载均衡概述 - **主题与目标**:本教程旨在深入探讨JBoss负载均衡的核心概念、配置方法及其与Apache的集成技术。主要内容涵盖JBoss的基本介绍、配置技巧、...
apache jboss 集群问题,集群后出现异常,收集资料!
### jboss-service.xml could not be opened, does it exist 配置jboss遇到的问题 在进行JBOSS服务器的配置过程中,经常会遇到一个令人头疼的问题:“jboss-service.xml could not be opened, does it exist?”这样...
当设置为`true`时,jBoss会尝试使用与请求体相同的编码格式来解析URL参数,从而避免了因为编码不一致而引起的乱码问题。 #### 注意事项 - 在进行上述配置时,请确保所使用的字符编码与客户端提交的数据编码保持...
标题提及的"解决jboss中启动的优先级的问题"是针对JBoss服务器如何确保特定应用或服务在其他依赖项启动后才启动的技术细节。 首先,我们需要理解JBoss中的部署模型。JBoss作为一款开源的应用服务器,它遵循Java EE...
Jboss 项目部署文档 Jboss 项目部署文档是指在 Jboss 服务器上部署项目的详细步骤,包括环境变量的配置、项目打包、配置文件的修改、JNDI 的配置等。以下是 Jboss 项目部署文档的详细知识点: 一、环境变量配置 ...
安装与配置 JBoss 涉及以下步骤: 1. 设置 `%JAVA_HOME%` 为本地 JDK 目录。 2. 运行 `%JBoss_HOME%\bin\run.bat` 启动 JBoss。 3. 关闭 JBoss,可以通过执行 `%JBoss_HOME%\bin\shutdown.bat -S` 命令。 4. 配置 ...
jboss常用问题解决,提供了基本的jboss日常的一些错误的解决方案。对于jboss经常出现的问题进行了解析。
【JBOSS,JBoss安装部署】 JBoss是Red Hat公司开发的一款开源的应用服务器,它基于Java EE(Enterprise Edition)规范,提供了全面的企业级应用程序部署和管理解决方案。本篇文章将详细讲解JBoss的安装和部署过程,...
在本文中,我们将讨论在CentOS操作系统环境下,如何进行Apache负载均衡与JBoss集群的配置。负载均衡和集群配置是提高网站可用性、扩展性和性能的关键技术。通过这篇文章,我们会了解到详细的配置步骤,以及它们在...
2. **内存启动**:与之前的版本相比,7.1.0.Final大大缩短了启动时间,这得益于其内存中的部署模型。应用直接部署到运行时的内存中,显著提升了启动和部署速度。 3. **CLI和Management API**:JBoss AS 7提供了...
资源名称:JBoss 管理与开发核心技术:第三版内容简介:本书的主要目的是从配置和架构这两个角度弄清楚标准JBoss 3.2.x的架构组件。使用JBoss的开发者将理解如何配置标准的组件。其中,需要开发者注意的是,本书不是...
- client目录:包含与JBoss客户端通信所需的Java库(JARs)。 - docs目录:存放JBoss服务器的文档和示例。 - lib目录:JBoss启动时加载的一般JAR文件,这些JAR文件可供所有配置共享。 - server目录:包含服务器配置...
JBoss是一个开源的应用服务器,它支持Java消息服务(Java Message Service,简称JMS),这是一种标准的API,用于在分布式环境中进行异步通信。JMS允许应用程序创建、发送、接收和读取消息,极大地提高了系统的可伸缩...
JBoss EAP 7.2.6 版本是一个重要的更新,包含了多个版本的 GA(General Availability)补丁以及一个CP(Cumulative Patch)更新,旨在提升性能、增强安全性和修复已知问题。 1. **补丁的重要性** 补丁是软件维护的...
本篇将详细讲解如何在MyEclipse中配置JBoss,以便进行无缝的开发与调试。 【配置步骤】 1. **安装MyEclipse**:首先,确保已经安装了MyEclipse。可以从官方网站下载最新版本,并按照指引完成安装。 2. **下载...