Welcome 微信登录

首页 / 软件开发 / JAVA / WebService大讲堂之Axis2(8):异步调用WebService

WebService大讲堂之Axis2(8):异步调用WebService2011-08-13 BlogJava 哈佛校训上一篇:WebService大讲堂之Axis2(7):将Spring的装配JavaBean发布成WebService

在前面几篇文章中都是使用同步方式来调用WebService。也就是说,如果被调用的WebService方法长 时间不返回,客户端将一直被阻塞,直到该方法返回为止。使用同步方法来调用WebService虽然很直观, 但当WebService方法由于各种原因需要很长时间才能返回的话,就会使客户端程序一直处于等待状态,这 样用户是无法忍受的。

当然,我们很容易就可以想到解决问题的方法,这就是多线程。解决问题的基本方法是将访问 WebService的任务交由一个或多个线程来完成,而主线程并不负责访问WebService。这样即使被访问的 WebService方法长时间不返回,客户端仍然可以做其他的工作。我们可以管这种通过多线程访问 WebService的方式称为异步访问。

虽然直接使用多线程可以很好地解决这个问题,但比较麻烦。幸好Axis2的客户端提供了异步访问 WebService的功能。

RPCServiceClient类提供了一个invokeNonBlocking方法可以通过异步的方式来访问WebService。下面 先来建立一个WebService。

MyService是一个WebService类,代码如下:

package service;public class MyService{public String getName(){try{System.out.println("getName方法正在执行");//延迟5秒Thread.sleep(5000);}catch (Exception e){}return "火星";}}