关闭。这个问题是opinion-based .它目前不接受答案。
想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它.
6年前关闭。
Improve this question
我们有一个现有的网络服务,基本上有 2 个调用:submitWork、pickingResponse。 Web 服务的客户端通过调用提供 transactionId 响应的 submitWork() 提交要处理的任务,然后定期调用带有 transactionId 的pickupResponse() 以实际获取结果。在服务器内部,工作在几个不同的进程中执行,一些事件驱动,大约需要 15 秒才能完成。
新的业务请求是使该流程处于同步调用中,这意味着客户端将调用 newSubmitWork() 并且该调用将尽可能提供最终响应。
基本实现是:将这两个旧执行包装在一个逻辑中,提交工作,然后等待/循环以获取响应。这使得新的 Web 服务调用基本上需要大约 15 秒的时间。在多个并发请求的情况下,如此长的调用会导致服务器出现各种问题。例如,使用太多线程,或者没有可用的线程然后超时。或者,最严重的场景,调用到达服务器,开始处理,但客户端超时,尽管逻辑实际上已经完成。
我正在为这种情况寻找替代解决方案或做法,因此请就此提出建议。
已经在内部讨论过的几个选项:
最佳答案
如果您赶时间,我肯定会选择解决方案#2。虽然,使用回调将更难阅读您的代码。否则,#1 是最好的,因为您删除了应用程序中所有不必要的异步逻辑。
关于java - 如何使异步调用同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31990953/