在这种情况下哪个更好 - 同步或异步Web服务?

时间:2010-01-20 22:32:59

标签: asynchronous service axis2 synchronous

我正在Axis2中设置一个Web服务,它的工作是获取一堆XML并将其放到队列中以便稍后处理。我理解可以通过在“Call”实例上创建一个“invokeNonBlocking”操作来设置客户端以异步方式调用同步Web服务。 (参考http://onjava.com/pub/a/onjava/2005/07/27/axis2.html?page=4

所以,我的问题是,在这种情况下使用异步Web服务有什么好处吗?它似乎是多余的,因为1)客户端没有被阻塞,2)服务必须接受并将xml写入队列,无论它是同步还是异步

3 个答案:

答案 0 :(得分:1)

在我看来,异步是适当的方式。需要考虑的几件事情:

  1. 您是否有多个客户在任何特定时刻访问此服务?
  2. 这个过程多久发生一次?
  3. 实现异步方法需要花费更多的精力。但我保证,最终你会对结果更加满意。首先,您不必管理线程。您主要担心的可能是que中数据的波动性(即竞争/死锁条件)。

答案 1 :(得分:0)

“同步通话”似乎合适,我同意。

如果来自客户端的请求不耗时,那么我没有看到使调用异步的优势。根据我对此处所讨论的情况的理解,网络服务将在未来的某个时间对请求执行“处理”。

相反,如果请求需要一个耗时的过程,那么异步调用将是合适的。

答案 2 :(得分:0)

在重新思考之后,我认为该服务应该是异步的。原因是它将把数据写入队列的任务放到一个单独的线程中,从而减少了超时的可能性。它使得这个过程变得更加复杂,但是如果我可以避免超时,那么它就必须完成。