我已经做了几年的Java,但是对于异步编程并没有太多的经验。
我正在开发一个应用程序,该应用程序调用一些同步Web服务的SOAP Web服务调用,并且当前我的消费应用程序的实现也是同步的,即我的应用程序线程在等待响应时会被阻塞。
我试图学习如何以异步方式处理这些SOAP调用 - 只是为了好玩,但我有一些高级问题,似乎找不到任何答案。
我正在使用CXF,但我的问题不是特定于CXF或SOAP,而是更高层次的,从异步应用程序架构的角度来看。
我想知道(通过场景进行工作)- 高层次地 - 是:
- 所以我有一个线程(
A
)在我的JVM中运行,它调用远程Web服务 - 它注册一个
回调
方法并返回一个Future
- 线程(
A
)完成了它的工作,并在返回Future
后返回到它的池中 - 远程Web服务响应返回并分配线程(
B
),调用回调
方法(通常使用结果填充Future
)
Q1. 我无法摆脱阻塞线程模型 - 如果线程(A)不再侦听该网络套接字,那么来自远程服务的响应如何分配给线程(B) - 它是否被视为服务器/容器中的新请求,然后分配一个线程来处理它?
Q2. 我想象中与Q1密切相关:如果没有线程拥有Future
或handler
(带有其回调
方法),那么来自远程Web服务的响应如何与其需要调用的回调方法关联起来?
或者,换句话说,线程B
(现在正在处理响应)如何获得对Future
/ Callback
对象的引用?
非常抱歉我的问题如此之长 - 感谢任何花时间阅读它的人! :)