在Java中调用外部Web服务最有效的方法是什么?
在我们的一个应用程序中,我们需要调用Yahoo Soap Web服务来获取天气和其他相关信息 我使用axis1.4中的wsdl2java工具生成了所需的存根,并编写了一个客户端。我使用jsp的UseBean包含客户端bean和在客户端中定义的调用方法,这些方法调用yahoo webservice inturn 现在的问题是:当用户调用jsp时,Web服务的响应时间差别很大,比如一个用户的响应时间不到10秒,而同一网络中的另一个用户的响应时间超过一分钟 我只是想知道Axis1.4是否会对请求进行排队,即使JSP是多线程的在Java中调用外部Web服务最有效的方法是什么?,java,web-services,axis,Java,Web Services,Axis,在我们的一个应用程序中,我们需要调用Yahoo Soap Web服务来获取天气和其他相关信息 我使用axis1.4中的wsdl2java工具生成了所需的存根,并编写了一个客户端。我使用jsp的UseBean包含客户端bean和在客户端中定义的调用方法,这些方法调用yahoo webservice inturn 现在的问题是:当用户调用jsp时,Web服务的响应时间差别很大,比如一个用户的响应时间不到10秒,而同一网络中的另一个用户的响应时间超过一分钟 我只是想知道Axis1.4是否会对请求进行排
最后,还有一种调用Web服务(Yahoo weather)的有效方法。通常我会同时收到200个来自用户的请求。我会使用谷歌工具来监控对web服务的调用需要多长时间 这里发生了几件事:
也许这是一个进行AJAX调用的好地方。如果您可以在用户做其他事情时在后台获取天气信息,那么这将是一个很好的解决方案。为什么不安排一个线程每隔一分钟左右获取一次天气信息,并将其公开给JSP,而不是让每个JSP获取自己的天气报告 这对您和Yahoo来说都要高效得多,JSP只需查找本地对象(几乎是即时的),而无需连接到web服务 编辑 本答案评论中的一些新要求表明了选择解决方案的不同方式 web服务似乎不仅请求天气,而且还请求其他数据,如飞行数据。天气不仅不会经常变化,而且对每个用户来说都是相同的 对飞行数据检索的要求与对气象数据的要求大不相同。因此,我认为您应该定义几种类型的(远程)数据,并选择不同的解决方案 对于每个类别 作为需求的基础,我将使用一些简单的方法:
- 用户喜欢他们的信息及时,他们不喜欢等待
- web服务器上存储的数据量是有限的
- 远程web服务有各种各样的EULA,可能对同一源(您)对相同数据的200个并发请求不满意
现在的诀窍是确定何时可以缓存数据。如果可行,请执行该操作,否则在后台运行web服务查询。这可以通过现在展示JSP并在后台启动web服务查询来实现。JSP可以有一个AJAX脚本,用于查询web服务器数据是否准备就绪,并在准备就绪时将该数据插入页面。我建议使用本地缓存和数据池。与其发送200个类似/相同位置的单独请求,不如运行一个后台线程,只为用户感兴趣的位置提取天气信息,并在本地缓存它们,该缓存大约每分钟更新一次。当用户请求其个人首选项时,如果位置是新的或缓存中的数据过时,则请求会命中缓存并重新蚀刻。这样,用户将有一个更无缝的体验,您将不会遇到Yahoo节流和拒绝服务。Yahoo weather service是我们使用的几种服务之一,我们也经常使用其他服务,如获取航班可用性等。在这种情况下,我无法安排事情:)然后分解请求,你网站的部分加载速度会比其他部分慢,显示经典的搜索动画。你不能对第三方“免费”服务提出要求。如果您为航班可用性服务付费,请让他们加快游戏进度。@Sudheer将请求分为三类。对于所有客户机和每个客户机,数据量都是相同的。所有人(美国的天气)都可以这样做。数据量有限(每个州的天气情况)而且,您只有51条记录,而不是1条缓存记录。每个客户机(从洛杉矶国际机场起飞的航班)都可以通过Ajax完成。最初的JSP加载速度很快,Ajax请求通过一个有限的JSP加载,这个JSP加载速度可能很慢,但只有页面的一部分加载速度慢,并且有一个漂亮的指示器。比等待页面出现更令人沮丧。