gpt4 book ai didi

java - 应用程序如何处理异步响应 - 通过回调

转载 作者:搜寻专家 更新时间:2023-11-01 03:50:39 24 4
gpt4 key购买 nike

我已经使用 Java 几年了,但我在异步编程方面经验不多。

我正在开发一个应用程序,它使 SOAP 网络服务调用某些同步网络服务,目前我的消费应用程序的实现也是同步的,即。我的应用程序线程在等待响应时阻塞。

我正在尝试学习如何以异步方式处理这些 SOAP 调用 - 只是为了它的 hell ,但我有一些高级问题,我似乎无法找到任何答案。

我正在使用 CXF,但我的问题不是具体关于 CXF 或 SOAP,而是更高级别的问题,我认为是在异步应用程序架构方面。

我想知道的(通过场景工作)- 在高层次上- 是:

  1. 所以我有一个线程 ( A ) 在我的 JVM 中运行,它调用远程 Web 服务
  2. 注册一个callback方法并返回 Future
  3. 线程 ( A ) 已经完成了它的工作,并在返回 Future 后返回到它的池中
  4. 远程网络服务响应返回,线程(B)被分配并调用callback方法(通常用我相信的结果填充 Future)

Q1。我无法摆脱阻塞线程模型——如果线程 (A) 不再监听该网络套接字,那么从远程服务返回的响应如何分配给线程 (B)——它是否只是被视为一个新的请求进入服务器/容器,然后分配一个线程来服务它?

Q2。我想与 Q1 密切相关:如果没有 Thread 有 Future , 或 handler (及其 callback 方法)在其堆栈上,那么来自远程 Web 服务的响应如何与它需要调用的回调方法相关联?

或者,换句话说,Thread B 是如何实现的? (现在处理响应)获得对 Future 的引用/Callback对象?


非常抱歉,我的问题太长了 - 感谢所有花时间阅读它的人! :)

最佳答案

我不明白你为什么要使用异步线程来增加所有这些复杂性。

异步soap服务的设计方式:您有一项服务向给定的客户发送响应。这些客户端处理异步给出的响应。完成后,他们会调用另一个 soap 方法来返回他们的响应。响应将仅存储在队列中(例如数据库表),没有任何额外的逻辑。您将有一个“工作人员”服务处理传入的任务。如果再次需要响应,将调用另一个远程服务上的另一个方法。我将作为事件存储在数据库中的请求,稍后将由 EventHandler 异步处理。看六角形架构: https://www.youtube.com/watch?v=fGaJHEgonKg

关于java - 应用程序如何处理异步响应 - 通过回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29634828/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com