使用线程库。保持主线程打开以处理响应,并派生出螺纹连接()互相排队。在
您需要向API用户提供一个作业id(最好是在数据库中的应用程序之外保存这些作业id,也许还有进度和状态更新信息),然后允许他们查询作业的状态/从另一个端点下载作业。您可以保留另一个线程队列来处理与收集/下载相关的任何计算密集型任务。在
尽管如此,这一切也可以通过微服务架构来实现,在这个架构中,你有一个应用程序调度作业,一个应用程序检索/处理数据,以及一个应用程序处理状态/下载请求。这些将通过http接口(restful将是很好的)和一个用于数据的公共持久性的数据库来连接。在
最后一种方法的好处是,在Kubernetes这样的框架中,每个应用程序都可以从可用性和资源的角度独立地进行扩展。在
更新:
只要读一下你的原始帖子,你的主要问题似乎是把你的数据保存在一个全局变量中,而不是数据库中。将数据保存在数据库中,并通过单独的应用程序或在当前应用程序中预留和可用的一组线程将其提供给客户端。在
更新对OP评论的回应:
Stefano,在您描述的用例中,不需要任何组件相互连接。它们都只需要连接到数据库。在
数据收集服务应该收集数据,然后将其提交到数据库进行存储,“请求数据”组件可以在那里找到并检索数据。在
如果此过程需要用户输入,则“提交数据请求”组件应接受该请求,向用户提供id,然后将该作业的要求存储在数据库中,以便数据采集器组件进行发现。然后,您将需要另外一个组件来将作业的状态/进度从数据库提供给用户。在
你用什么数据库?如果它很慢/很忙,您可以扩展可用的资源(RAM),或者您可以查看从数据采集器批处理更新,这很可能是不必要的DB开销的罪魁祸首。您每秒提交多少事务?什么尺寸的?在
Ed anche,si sei italiano,poui domandarmi in la lingua tua si si si piu,facile communicare questi detagli technichi。在