java?webservice超時時間設(shè)置方法代碼
一、前言
之前遇到過rabbitmq隊列卡死的問題,有消費者,但是就不消費隊列里的消息;
后來發(fā)現(xiàn)是消費者執(zhí)行webservice方法時,沒有設(shè)置超時時間,默認永不超時,然后趕上對端系統(tǒng)出問題,方法就一直執(zhí)行不完,隊列消息也就一直卡住不動。(加try-catch是沒有用的,catch不到,就是沒有執(zhí)行完一直卡住,因為超時時間默認永不超時)
在此總結(jié)下java webservice設(shè)置超時時間的方法。
二、代碼
try {
JaxWsDynamicClientFactory dcf=JaxWsDynamicClientFactory.newInstance();
//這里有2種方法,不確定到底是哪種,就都寫上了
dcf.getJaxbContextProperties().put("com.sun.xml.ws.request.timeout", 10000);
dcf.getJaxbContextProperties().put("com.sun.xml.ws.connect.timeout", 10000);
dcf.getJaxbContextProperties().put("com.sun.xml.internal.ws.connection.timeout", 10000);//建立連接的超時時間為10秒
dcf.getJaxbContextProperties().put("com.sun.xml.internal.ws.request.timeout", 10000);//指定請求的響應(yīng)超時時間為10秒
LOGGER.info("設(shè)置超時時間");
Client client= dcf.createClient("http://128.0.0.1/A/services/BService?wsdl");
//這里再設(shè)置超時時間好像也行
//client.getRequestContext().put("com.sun.xml.ws.request.timeout", 10000);
//client.getRequestContext().put("com.sun.xml.ws.connect.timeout", 10000);
//client.getRequestContext().put("com.sun.xml.internal.ws.connection.timeout", 10000);//建立連接的超時時間為10秒
//client.getRequestContext().put("com.sun.xml.internal.ws.request.timeout", 10000);//指定請求的響應(yīng)超時時間為10秒
//如果不設(shè)置超時時間,那么如果連接不通,就會卡在這一步
Object[] resultObj = client.invoke("createOrenableAccount", new Object[] { accountToXML("abc") });
String retXML = resultObj[0].toString();
StringReader read = new StringReader(retXML);
InputSource source = new InputSource(read);
SAXBuilder sb = new SAXBuilder();
Document doc = sb.build(source);
Element root = doc.getRootElement();
LOGGER.info(root.getChildText("code"));// 0 成功
LOGGER.info(root.getChildText("code") + ", " + root.getChildText("message"));
} catch (Exception e) {
LOGGER.error((new StringBuilder("invokeWS Exception:")).append(e).toString(),e);
}
------------------
public static String accountToXML(String userName) {
Document document = null;
Element et = new Element("account");
document = new Document(et);
document = addNode(document, "appname", "AI");
document = addNode(document, "uid", userName);
document = addNode(document, "eruid", userName);
return documentStr(document);
}
-------------------
public static String documentStr(Document document) {
XMLOutputter xop = new XMLOutputter();
String xmlStr = xop.outputString(document);
return xmlStr;
}
------------------------
pom.xml是這樣:
<!-- Apache CXF -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-rs-client</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.0.0</version>
</dependency>總結(jié)
到此這篇關(guān)于java webservice超時時間設(shè)置方法的文章就介紹到這了,更多相關(guān)java webservice超時時間設(shè)置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Springboot中路徑參數(shù)帶 (%2F)的問題徹底解決方案
這篇文章主要介紹了徹底解決Springboot中路徑參數(shù)帶(%2F)的問題,本文結(jié)合示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-06-06
JAVA開發(fā)環(huán)境Vs?code配置步驟詳解
這篇文章主要為大家介紹了JAVA開發(fā)環(huán)境Vs?code配置步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-04-04
Mybatis中的PageHelper的執(zhí)行流程分析
這篇文章主要介紹了Mybatis的PageHelper執(zhí)行流程,本文給大家介紹介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-02-02

