我们有独特的案例。 我们需要和外部API接口。 这需要长时间轮询他们的端点,以获得他们所谓的实时事件。
问题是,最多可以有80,000人/设备在任意时间单击此端点,监听事件,并且每个设备/人可能有一个连接。
如果客户端请求从我们的Spring服务中长轮询事件,则我们的服务随后异步调用外部API来长轮询事件。 外部API定义为允许最小长轮询超时设置为180秒。
在这里,我遇到了排队线程池无法正常工作的情况。 因为如果有“5分钟、10个最大值、10个队列”这样的线程池,就会聚焦10个线程,在当前10个中的10个完成之前就没有机会了。
需要服务或失败,但把负载平衡器等放在后面。 我不想在没有实际轮询的情况下挂起客户端。
我们研究了延迟结果的使用方法,并从控制器返回。
一些调整过的东西
@ request mapping (value=' test/deferred result ',method=RequestMethod.GET ) )。
eferredresultcompletablefuture.supply async ((-testservice.test ).whencompleteasync ) ) result,throwable)。
返回延迟结果;
}
我怀疑我是否在正确的道路上。 CompletableFuture.supplyAsync ) )方法提供可执行文件和什么样的可执行文件(和配置),使我们怀疑是否应该最好地完成我们的任务。
我想知道是否有人已经读过各种文章、帖子等,知道可能对我们的具体情况有帮助。