16:37:21.945 [Workflow Executor taskList="PullFulfillmentsTaskList", domain="test-domain": 3] WARN com.uber.cadence.internal.common.Retryer - Retrying after failure
org.apache.thrift.transport.TTransportException: Request timeout after 1993ms
at com.uber.cadence.serviceclient.WorkflowServiceTChannel.throwOnRpcError(WorkflowServiceTChannel.java:546)
at com.uber.cadence.serviceclient.WorkflowServiceTChannel.doRemoteCall(WorkflowServiceTChannel.java:519)
at com.uber.cadence.serviceclient.WorkflowServiceTChannel.respondDecisionTaskCompleted(WorkflowServiceTChannel.java:962)
at com.uber.cadence.serviceclient.WorkflowServiceTChannel.lambda$RespondDecisionTaskCompleted$11(WorkflowServiceTChannel.java:951)
at com.uber.cadence.serviceclient.WorkflowServiceTChannel.measureRemoteCall(WorkflowServiceTChannel.java:569)
at com.uber.cadence.serviceclient.WorkflowServiceTChannel.RespondDecisionTaskCompleted(WorkflowServiceTChannel.java:949)
at com.uber.cadence.internal.worker.WorkflowWorker$TaskHandlerImpl.lambda$sendReply$0(WorkflowWorker.java:301)
at com.uber.cadence.internal.common.Retryer.lambda$retry$0(Retryer.java:104)
at com.uber.cadence.internal.common.Retryer.retryWithResult(Retryer.java:122)
at com.uber.cadence.internal.common.Retryer.retry(Retryer.java:101)
at com.uber.cadence.internal.worker.WorkflowWorker$TaskHandlerImpl.sendReply(WorkflowWorker.java:301)
at com.uber.cadence.internal.worker.WorkflowWorker$TaskHandlerImpl.handle(WorkflowWorker.java:261)
at com.uber.cadence.internal.worker.WorkflowWorker$TaskHandlerImpl.handle(WorkflowWorker.java:229)
at com.uber.cadence.internal.worker.PollTaskExecutor.lambda$process$0(PollTaskExecutor.java:71)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
我们的父工作流代码基本上是这样的(JSON 对象
来自组织.
JSONObject[] array = restActivities.getArrayWithHugeJSONItems();
for(JSONObject hugeJSON: array) {
ChildWorkflow child = Workflow.newChildWorkflowStub(ChildWorkflow.class);
child.run(hugeJSON);
}
我们发现,在大多数情况下,父工作流工作者无法启动子工作流,并抛出上面的超时异常。它疯狂地重试,但从未成功,并一遍又一遍地打印超时异常。然而,有时我们非常幸运,它的工作。有时在活动工作器上它甚至更早就失败了,它抛出同样的异常。我们认为这是由于数据太大(大约5MB ),无法在超时时间内发送(从日志判断,我们猜测设置为2s)。如果我们用少量虚假数据调用< code>child.run,它100%有效。
我们使用子工作流的原因是我们想使用Async.function
来并行运行它们。那么我们如何解决这个问题呢?我们应该增加节俭超时配置吗?或者我们可以避免传递大量数据?
提前感谢!
---Maxim回答后更新---
谢谢你。我阅读了示例,但对我的用例仍有一些疑问。假设我的RestActivitiesWorker中有一个由100个巨大的JSON对象组成的数组,如果我不应该将这个巨大的数组返回给工作流,我需要对数据库进行100次调用,以创建100行记录,并将100个id放入一个数组中,并将其传递回工作流。然后,工作流为每个id创建一个子工作流。然后,每个子工作流调用id为的另一个活动,从数据库中加载数据。但是该活动必须将那个巨大的JSON传递给子工作流,这样可以吗?对于向数据库中插入100个数据的RestActivitiesWorker来说,如果中途失败了怎么办?
我想归根结底,我们的工作流正试图直接使用巨大的JSON。我们正在尝试将巨大的JSON(5-30MB,不是那么大)从外部系统加载到我们的系统中。我们稍微分解了JSON,操作了一些值,并使用几个字段中的值来执行一些不同的逻辑,最后将其保存在数据库中。我们应该如何使用Temporal?
Temporal/Cadence不支持将大型blobs作为输入和输出进行传递,因为它使用DB作为底层存储。因此,您需要改变应用程序的架构来避免这种情况。
标准的解决方法是:
我正在尝试从服务器下载PPT文件。它以字节为单位。 但在调试时,我注意到输入流在运行时抛出FileNotFound异常。该文件确实存在于服务器上,这是我的代码,如果有任何帮助,我们将不胜感激。 我在Mac上使用Charles(类似于windows上的fiddler)来查看我从服务器发送和接收的内容。服务器不会返回任何错误,尽管它显示下载步骤6-7秒,下载大约400字节,然后停止。 从输入流行引发异
2.)AVD没有互联网问题(原因稍后解释)。 3.)与我的volley singleton类或请求队列无关(原因稍后解释)。 所以我想我在Volley/Request Future的用法上犯了某种错误。
我正在尝试编写一段代码来索引搜索一个值,如果它存在于数组中。以下是代码的样子: 每次我运行代码时,在将值输入数组时,它都会给我这个空指针异常:线程“main”java中的异常。lang.NullPointerException:无法存储到int数组,因为在indexSearch处“[]”为null。main(indexSearch.java:22) 为什么会这样,我该如何修复它?
我试图在运行在Android中的SubscriptionClient实例上调用RegisterMessageHandler方法。 在将消息发布到特定主题(通过自动测试)20秒左右之后,我在我的Android应用程序中收到了几个超时异常,该应用程序实际上包含了SubscriptionClient实例的RegisterMessageHandler。 输出窗口 这里有个错误: **System.Time
我在非GUI模式下为100个并发用户运行了一个脚本 我在运行期间保存了生成的 JTL 文件 运行完成后,我在查看结果树侦听器中加载了JTL文件,我可以看到如下错误: 响应代码: 非 HTTP 响应代码: 套接字超时异常 响应消息: 非 HTTP 响应消息: 读取超时 响应代码:非HTTP响应代码:Java . net . connect异常响应消息:非HTTP响应消息:连接超时:连接 我的JMet