首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java:如何处理大约需要10秒的API调用

Java:如何处理大约需要10秒的API调用
EN

Stack Overflow用户
提问于 2017-02-28 07:58:17
回答 1查看 477关注 0票数 1

我有一个要求,我对它的设计有点困惑。

Requirement:iOS调用后端(Java),后端调用cloud,后者返回未来调用的令牌。云API可能需要大约6到10秒才能返回实际结果,因此它不会等待6到10秒,而是返回一个令牌,并让调用者(在我的例子中是后端java服务器)来获取结果。

Current Approach:iOS调用后端(java服务器),后端调用cloud和get的令牌,然后将线程休眠1秒,一旦线程被调用,就会命中cloud以获得状态,如果状态未完成,则再次调用thread.sleep,直到cloud调用得到完整的结果。一旦cloud返回结果,后端就会将结果返回给iOS。

这种方法是不可扩展的,是用来测试云API的,但是现在我们需要一种更可伸缩的方法。

--这就是我对 iOS调用后端的想法,后端调用API并将结果发送给iOS(它只显示一些静态屏幕以保持用户的参与),同时它将对象放入Spring池执行器中。执行器每一秒点击API并通过推送通知更新iOS,然后继续执行,直到从cloud获得最终结果为止。

这比现有的方法更好,但是即使这样看起来也不具有可伸缩性,线程池执行器在一段时间后就会耗尽(使其变慢),而且thread.sleep也不是一个好的选择。

我考虑过使用AWS,但它没有提供实时处理和每1秒运行后台作业,这似乎不是一个好的选择。

我还在探索Apache,并试图了解它是否适合我的用例。

让我知道,如果有人做了类似的用例。

EN

回答 1

Stack Overflow用户

发布于 2017-03-02 03:20:38

我正在考虑使用(让我们称之为cloudApiCall),一旦从Cloud接收到令牌,我将向执行器提交一个未来的作业,并将令牌返回给Mobile。与ConcurrentTaskExecutor相关的线程将选择作业,调用Cloud并将响应提交给另一个ConcurrentTaskExecutor(让我们称之为pushNotification),后者将负责将无声通知推送给移动客户端。线程关联的ConcurrentTaskExecutor(cloudApiCall)也将检查调用的状态,如果需要以后的调用,它将将作业提交回ConcurrentTaskExecutor(cloudApiCall)。这将继续下去,直到我们得到完全的回应。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42503159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档