我正在Axis2中设置一个Web服务,它的工作是获取一堆XML并将其放到队列中以便稍后处理。我理解可以通过在“Call”实例上创建一个“invokeNonBlocking”操作来设置客户端以异步方式调用同步Web服务。 (参考http://onjava.com/pub/a/onjava/2005/07/27/axis2.html?page=4)
所以,我的问题是,在这种情况下使用异步Web服务有什么好处吗?它似乎是多余的,因为1)客户端没有被阻塞,2)服务必须接受并将xml写入队列,无论它是同步还是异步
答案 0 :(得分:1)
在我看来,异步是适当的方式。需要考虑的几件事情:
实现异步方法需要花费更多的精力。但我保证,最终你会对结果更加满意。首先,您不必管理线程。您主要担心的可能是que中数据的波动性(即竞争/死锁条件)。
答案 1 :(得分:0)
“同步通话”似乎合适,我同意。
如果来自客户端的请求不耗时,那么我没有看到使调用异步的优势。根据我对此处所讨论的情况的理解,网络服务将在未来的某个时间对请求执行“处理”。
相反,如果请求需要一个耗时的过程,那么异步调用将是合适的。
答案 2 :(得分:0)
在重新思考之后,我认为该服务应该是异步的。原因是它将把数据写入队列的任务放到一个单独的线程中,从而减少了超时的可能性。它使得这个过程变得更加复杂,但是如果我可以避免超时,那么它就必须完成。