我们有一个现有的Web服务,基本上有两个调用:submitWork,pickupResponse。 Web服务的客户端通过调用submitWork()提交要处理的任务来提交transactionId响应,然后使用transactionId定期调用pickupResponse()来实际获取结果。在服务器内部,工作在几个不同的过程中执行,一些事件驱动,并且需要大约15秒才能完成
新的业务请求是使该进程处于同步调用中,这意味着客户端将调用newSubmitWork(),并且该调用将一直提供最终响应。
基本实现是:将这两个旧的执行包装在一个逻辑中,提交工作然后等待/循环以获取响应。这使得新的Web服务调用基本上花费大约15秒的时间。在多个并发请求的情况下,这样长的调用会在服务器中引起各种问题。例如,使用太多线程,或没有线程可用,然后超时。或者,最严重的情况是,呼叫到达服务器,开始处理,但客户端会超时,尽管逻辑实际上已完成。
我正在为这种情况寻找替代解决方案或做法,因此请提供相应的建议。
内部已经讨论了几个选项:
答案 0 :(得分:1)
如果您能够支付额外的Dev以使其成为同步,这是最干净的解决方案。
如果你没有资源去解决#1,我肯定会寻求解决方案。
你应该提高多少资源?当你的应用程序获得高负载时呢?没有什么能保证执行时间。这个解决方案肯定会导致间歇性的例外。
X和Y取决于调用时服务器的负载量。您无法控制的变量太多。不是一个好的解决方案
我不明白这将如何使您的2项服务同步。
如果你匆忙,我肯定会去寻求解决方案#2。虽然,使用回调您的代码将更难阅读。否则#1最适合删除应用中所有不必要的同步逻辑。