云环境中的异步任务

时间:2020-05-25 14:23:07

标签: java azure asynchronous google-cloud-platform cloud

我正在尝试找到一种在Java应用程序的云中运行异步任务的方法。

例如,我们在GCP中运行我们的应用程序,并且有一种方法可以运行Deferred TasksTask Queues。但是任务序列化存在问题。我并不总是能够使整个层次结构可序列化。

也可以使用ExecutorService,但有一个缺点:它无法为具有自动缩放功能的实例运行后台线程。

我的任务的主要目的是将请求线程与长期运行的任务分开。同样最好在单独的机器上运行这些任务。我想应该有某种方法可以实现我的目标,但是我还看不到它。

1 个答案:

答案 0 :(得分:2)

当您有要延迟的Java对象时,没有秘密,您必须序列化它们。这可以采取几种形式

  • 实现可序列化的界面并使用Cloud Task
  • 将对象存储在某个地方(firestore,Google Storage),并且仅将重新加载数据并处理它们的引用(firestore的documentId,GCS的BlobId)传递给任务
  • 将消息发布到PubSub中,并使用PubSub消息中嵌入的数据触发端点

在所有这些可能性中,您必须对数据进行序列化(以二进制,JSON,文本,...)

无论如何,对于“长期运行的工作”,全部取决于“长期运行”和所需的资源。如今,Cloud Run凭借15分钟的超时(很快增加了4倍)和2vCPU / 2Gb的内存(很快了)成为了一个很好的选择。如果适合您的要求,我强烈建议您对此进行了解。

  • 它是无服务器的
  • 它是便携式的
  • 您在另一台VM上执行运行