Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 云环境中的异步任务_Java_Azure_Asynchronous_Google Cloud Platform_Cloud - Fatal编程技术网

Java 云环境中的异步任务

Java 云环境中的异步任务,java,azure,asynchronous,google-cloud-platform,cloud,Java,Azure,Asynchronous,Google Cloud Platform,Cloud,我试图找到一种在cloud for java应用程序中运行异步任务的方法 例如,我们正在GCP中运行应用程序,有一种方法可以运行。但是任务的序列化有一个问题。我并不总是能够使整个层次结构可序列化 也可以使用,但也有一个缺点:它不能为具有自动缩放功能的实例运行后台线程 我的任务的主要目的是将请求线程从长时间运行的任务中分离出来。另外,最好在不同的机器上运行这些任务。我想应该有办法实现我的目标,但我还看不到。当您有想要延迟的Java对象时,没有秘密,您必须序列化它们。这可以采取多种形式 实现可序列

我试图找到一种在cloud for java应用程序中运行异步任务的方法

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

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


我的任务的主要目的是将请求线程从长时间运行的任务中分离出来。另外,最好在不同的机器上运行这些任务。我想应该有办法实现我的目标,但我还看不到。

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

  • 实现可序列化接口并使用云任务
  • 将对象存储在某个位置(firestore、Google Storage),只向任务传递引用(firestore的documentId、GCS的BlobId),以便重新加载数据并对其进行处理
  • 将消息发布到PubSub中,并使用嵌入在PubSub消息中的数据触发端点
在所有这些可能性中,您必须序列化数据(二进制、JSON、文本等)

无论如何,对于“长时间运行的作业”,所有这些都取决于“长时间”和所需的资源。今天,Cloud Run是一个很好的选择,它有15分钟的超时时间(很快会增加4倍)和2vCPU/2Gb的内存(很快会增加)。如果这符合你的要求,我强烈建议你去看看

  • 它没有服务器
  • 它是便携式的
  • 您可以在另一个VM上执行运行

云任务和序列化有什么问题?对象没有很好地序列化,您无法正确触发任务?我想在这个延迟的任务中传递一个服务,它依赖于其他服务,并且我对这个层次结构没有足够的控制权。这可能会导致java.io.NotSerializableException。解决方案可能是使这些服务更小,但这并不总是可能的。我想要类似的东西:taskService.execute(()->this.delegateService.process(entity));你是否在你的对象中实现了Serializable接口?是的,如果我实现Serializable,它会工作,但我并不喜欢这种方法,因为这意味着每个服务都应该是可序列化的,而且我并不总是能够在进一步研究后更改这些服务。我想你是对的,没有序列化它就不会工作。