【发布时间】:2015-06-20 12:07:11
【问题描述】:
我已经做 Java 几年了,但我对异步编程没有太多经验。
我正在开发一个应用程序,它使 SOAP Web 服务调用一些同步 Web 服务,目前我的 消费 应用程序的实现也是同步的,即。我的应用程序线程在等待响应时阻塞。
我正在尝试学习如何以异步方式处理这些 SOAP 调用 - 只是为了它,但我有一些我似乎无法找到任何答案的高级问题。
我正在使用 CXF,但我的问题不是专门针对 CXF 或 SOAP,而是更高级别,我认为是异步应用程序架构。
我想知道的(通过一个场景工作)——在高层次上——是:
- 所以我有一个线程 (
A) 在我的 JVM 中运行,它调用远程 Web 服务 - 它注册一个
callback方法并返回一个Future - 线程 (
A) 已经完成了它的工作,一旦它返回了Future,它就会返回到它的池中 - 远程 Web 服务响应返回,线程 (
B) 被分配并调用callback方法(我相信它通常会填充Future的结果)
第一季度。我无法摆脱阻塞线程模型-如果线程(A)不再侦听该网络套接字,那么从远程服务返回的响应如何分配线程(B)-它是否只是被视为一个新的请求进入服务器/容器,然后分配一个线程来服务它?
第二季度。我想与 Q1 密切相关:如果没有线程在其堆栈上具有 Future 或 handler(及其 callback 方法),那么来自远程 Web 服务的响应如何与它需要的回调方法相关联打电话?
或者,换一种问法,线程B(现在处理响应)如何获得对Future/Callback对象的引用?
非常抱歉,我的问题太长了 - 感谢所有抽出时间阅读它的人! :)
【问题讨论】:
-
您是想了解应用程序的当前行为,还是计划重新设计应用程序以使其以异步方式运行?
标签: java multithreading web-services asynchronous callback