首页 » 网站推广 » phpwebservice要求超时技巧_Axis调用webService问题

phpwebservice要求超时技巧_Axis调用webService问题

访客 2024-12-11 0

扫一扫用手机浏览

文章目录 [+]

2021-08-24 22:00:00.620| INFO|fce3ee0082a67242|5830914be8852ad6|false|1|http-nio-9090-exec-128|c.c.c.u.g.c.e.w.RequestLoggerHandler |the RequestLoggerHandler endPoint [https://login.10086.cn:32734/services/AssertionQryUID?wsdl], respMesssage [<?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv:Body><soapenv:Fault><faultcode xmlns:ns1="http://xml.apache.org/axis/">ns1:Client</faultcode><faultstring>No such operation 'getAssertInfoByArtifact'</faultstring><detail><ns2:hostname xmlns:ns2="http://xml.apache.org/axis/">ac-webservice-7df55d9dfb-9vbq9</ns2:hostname></detail></soapenv:Fault></soapenv:Body></soapenv:Envelope>]2021-08-24 22:00:00.621|ERROR|fce3ee0082a67242|5830914be8852ad6|false|1|http-nio-9090-exec-128|c.c.c.u.g.c.api.wsdlCall.WsdlService |[d424df19f29c4166902a93e9198535ed_CA02001],要求统一认证非常:No such operation 'getAssertInfoByArtifact'复制代码

这里的报错提示是AssertionQryUID这个方法的webserviceName该当是AssertionQryUID,但是日志里面提示传入的是getAssertInfoByArtifact,因此做事端报错了。
要求参数如下所示:

2021-08-24 22:00:00.501| INFO|fce3ee0082a67242|5830914be8852ad6|false|1|http-nio-9090-exec-128|c.c.c.u.g.c.e.w.RequestLoggerHandler |the RequestLoggerHandler endPoint [https://login.10086.cn:32734/services/AssertionQryUID?wsdl], reqMesssage [<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <getAssertInfoByArtifact soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <userName xsi:type="xsd:string">0qmwPBkdgvy7WZTW5RMSKde93O3Z86s9iAH3+pE2vnRZcd8eFCbAAK3Y4zuInazzmnL4cJvMmxaCzq9t+lOQHb62uWSXc9nfS+0RAPhPHLV1dRnnviCnP3ngLJabhfGqqrS6E4rPHFAv+8QrTcKHeunPmEZH/AUqsUn3GU0V/bnFdqRHaOJ2ADfjcaCpn34s8AVlB+T5d5t7SLmtF+SNk46xpPLgxW3W0WcTPKKfGFuBGgBtM5MC7D3w7thHP+nO87azJyU202WHbV11waL/qvj1OGPfwtjHnNF/VB5/Km7LUNe4noeoqvWSCHglnSL1oIGOHb5vznt+DSceprItHYcUb8WIDZB/fxM7CUfRia+N5vY4SNvMkHbLy4/jQTKL4bvdxrDt00WPG1Xd795AXmHRuuVhToj5mq/KI2ZH3AOe0I3oYG6L5AAZsWZ7rXJtegfj8RgHctmEE8DDN4LJlE39YVXaCfoUdM4UPM5W0OhszQ7U7y6wwX+o4K41faTSEHbx7gTFhcNpBpLb7eGzCSAiVqsePwtbQOVIFnjZSjmMqekOF25pMY4oLYbHNhcOH4vShUPAUIyLFLQdgxO3L0OnJ50I4PRE2J4EeQLX277hdsQ5+n18dG8Pq/lqPOOyyJvPxiun7EnDZfC24hsbhSSBjJ1u8d+NnWJLHSzFmfh1OvDIVnIVoeizVHdEBdzm8Y5HEdjUqj9/evER95kLK/QLuxE4eAWYnYFNd6qX9nj0N9RvONHE4ckD9Y/BV1U3</userName> </getAssertInfoByArtifact> </soapenv:Body></soapenv:Envelope>]复制代码更故意思的是在调度了Http要求类的超时时间等参数之后,接口的识别率提高得很快。

AxisProperties.setProperty("axis.http.client.maximum.total.connections","150");AxisProperties.setProperty("axis.http.client.maximum.connections.per.host","50");AxisProperties.setProperty("axis.http.client.connection.pool.timeout","20000");AxisProperties.setProperty("axis.http.client.connection.default.connection.timeout","10000");AxisProperties.setProperty("axis.http.client.connection.default.so.timeout","5000");复制代码问题剖析

这个问题在调用量低的时候很难复现,在调用量增大之后变得严重,看起来非常像线程安全的问题。
查看全体调用过程,虽然getService方法是一个静态方法,但是Call这个工具每次调用都会创建,是一个局部变量,该当不会有线程安全问题。
除非Call工具里面有一些共享变量之类的导致线程安全问题。
看下Call方法的内部。

phpwebservice要求超时技巧_Axis调用webService问题

果真Call类中Service是一个共享的变量,也便是所有的要求利用的是相同的Service,那么如果Service是非线程安全的,全体调用过程自然也就是非线程安全的。
而Http要求参数的调度使得线程安全问题更严重了,全体逻辑上的剖析是合理的,那么Service究竟是不是线程安全的呢?答案是否定。

Are Axis2 generated stubs thread-safe

也便是说axis1以及axis2都是线程非安全的。

办理办法stackoverflow上提到了一种办理办法,那便是池化技能。
既能办理线程安全问题,同时也提高了性能(须要调用的时候从池子里面获取工具,调用完成之后还回去)。
个人不太喜好这种办法,以为对资源的花费还是有点多,由于每个Service都会创建HttpClient,并且在里面还会用到连接池。
引入ThreadLocal办理线程安全问题,网上找了一下:threadLocal办理线程安全问题吗?结论是ThreadLocal不能办理共享变量的线程安全问题。
牢记牢记。
既然webservice实质上依然是通过Http调用远程做事,那么我完备可以不用框架,自己用Http工具类调用做事,这样不就没有任何线程安全的问题了,而且可以对调用过程进行优化,终极决定采取这种办法实现。
小结

看似一个大略client端调用,在利用过程中由于没有把稳到线程安全的问题,就会出错。
反思一下便是在自己不理解类库的情形下,盲目地利用单例才是引起线程安全问题的根本缘故原由,单例虽好,但在调用过程中一定确认是线程安全的才能利用,对付非线程安全的一定不能利用单例。

作者:hujun8610链接:https://juejin.cn/post/7000172743761068063来源:掘金著作权归作者所有。
商业转载请联系作者得到授权,非商业转载请注明出处。

标签:

相关文章