技术问题分析-报文截断02(11.21)

栏目: 编程工具 · 发布时间: 5年前

今天继续分析下Oracle OSB总线代理后发布的Web Service服务,在客户端消费的时候出现ESB系统级的异常,具体的异常错误信息为:

OSB-382030:Failure while un-marshalling message: Failed to parse XML text

该问题继续排查了一整天,但是仍然没有得到确切的原因。今天的进展如下:

发现出现异常的消费端均没有采用Http Chunked编码模式,这个时候Server端在获取完整数据的时候,需要和http-header中传递的Content-Length做比较,如果长度不一致也会抛出异常。在前面我们分析了当前的Post Timeout设置为2分钟,即在2分钟内如果还没有获取到完整的报文信息,那么就会出现Post Timeout的超时错误。而根据实际的日志排查,基本分析为:

OSB在接收消息请求的时候,在2分钟没有接收到完整的消息,导致出现Post TimeOut,而这个时候未完整的消息流传递给Proxy代理服务的时候,由于XML报文不完整,导致报出parse XML text的错误。

同时在设置Http的设置中,除了Post Timeout,还有一个Duration持续时间的设置(关闭不活动的http连接需要等待的时间),当前时间设置为30秒,是否该值也需要调整到120秒?这个是一个疑问点。

可以想到的后续进一步解决思路有

1. 对于出现问题的消费端,修改为启用Http Chunked编码模式方式。

2. 修改Duration持续时间的设置

这两个都是可以尝试去分析和解决的方向。

其次,今天我们进一步抓取了OSB Server上的日志信息,对于osb server本身的日志并没有太多的异常记录。但是我们在观察access.log日志的时候发现,在OSB Server上可能只产生了5个服务调用实例,但是在access.log文件里面却有多条Post记录,而每条记录本身都只Post传输了一部分数据,基本在1k左右。其中大量的Post都是在1059byte,初步分析应该是一次接口服务调用对于消息数据的传递分为多次Post进行,每次post只是传输了一部分数据。

而最后需要Server端对所有数据进行汇总后形成完整的报文信息再去调用代理服务。

那么为什么消费端会产生如此多次的Post调用记录?而其它消费方系统却没有这个现象,经过分析,出现问题的两个消费方系统均采用了 Docker 容器进行部署,分配的是动态IP信息,是否存在可能每次Post过来的数据本身也分散到多个节点在传输?

如果这个假设成立的话,那么完全就有可能是一次完整的Post操作被负载均衡到多个OSB Server节点上,从而导致了报文信息不全。因为当前我们的的负载均衡策略是完全轮询,不保持会话,对于非Docker部署的时候不会出现问题,但是在Docker动态容器化部署的时候则出现问题。

因此可以进一步验证的是将集群修改为Session会话保持后,是否还存在一样的问题。


以上所述就是小编给大家介绍的《技术问题分析-报文截断02(11.21)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

HTML5+CSS3精致范例辞典

HTML5+CSS3精致范例辞典

杨东昱 / 清华大学出版社 / 2013-1 / 48.00元

《HTML5+CSS3精致范例辞典(全彩印刷)》是专为希望成为网页设计师的学习者打造的工具书,书中详细说明了设计网页所需的HTML标记语言,对HTML5的网页标签规范作了完整说明,如元素标签的功能、属性以及如何使用等。有了基本网页制作能力,如何让网页更出色,版面更富变化、更易维护管理,那就得靠CSS帮忙了。《HTML5+CSS3精致范例辞典(全彩印刷)》还详细解说了最新CSS3的样式元素,除了说明......一起来看看 《HTML5+CSS3精致范例辞典》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

html转js在线工具
html转js在线工具

html转js在线工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具