【发布时间】:2016-09-16 03:47:58
【问题描述】:
我们需要实现一个异步网络服务。
- 网络服务行为:
我们将帐户请求发送到服务器,然后服务器发送回带有确认 ID 的同步响应。之后,我们收到多个包含该确认 ID 的回调请求。确认 ID 的最后一个回调请求将在响应中包含一个文本(完成:true),这将告诉我们这是该帐户和确认 ID 的最后一个回调请求。这将帮助我们知道特定帐户的异步调用已完成,我们可以标记其最终状态。我们需要为多个帐户执行此 Web 服务。因此,我们将收到许多帐户的回调请求。
- 问题:
处理来自多个帐户的多个回调请求的最佳方法是什么。
- 我们想到的解决方案:
- ExecutorService 固定线程池:这将并行处理我们的回调请求,但问题是它不保持顺序。因此,我们很难确定最后一个确认 ID(帐户)的回调请求已经到来。因此,我们无法确定该帐户的最终状态为已完成。
- ExecutorService 单线程执行器:这里,池中只有一个线程存在一个无边界队列。如果我们使用它,那么处理将非常慢,因为实际上只有一个线程在处理。
请提出一种实现内存和性能要求的最佳方法。
【问题讨论】:
标签: multithreading web-services asynchronous callback executorservice