首页 > 解决方案 > Corda - 执行具有多个输出状态的流时出现问题

问题描述

我正在尝试执行具有 3000 个输出状态(Java)的 Corda 流,但出现错误:

[Thread-8 (ActiveMQ-IO-server-org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl$4@6a8da5c5)] impl.JournalImpl.run - appendAddRecord::java.lang.IllegalArgumentException: Record is too large to store 18603342 {}
 java.lang.IllegalArgumentException: Record is too large to store 18603342
        at org.apache.activemq.artemis.core.journal.impl.JournalImpl.switchFileIfNecessary(JournalImpl.java:2915) ~[artemis-journal-2.2.0.jar:2.2.0]
        at org.apache.activemq.artemis.core.journal.impl.JournalImpl.appendRecord(JournalImpl.java:2640) ~[artemis-journal-2.2.0.jar:2.2.0]
        at org.apache.activemq.artemis.core.journal.impl.JournalImpl.access$200(JournalImpl.java:88) ~[artemis-journal-2.2.0.jar:2.2.0]
        at org.apache.activemq.artemis.core.journal.impl.JournalImpl$1.run(JournalImpl.java:778) [artemis-journal-2.2.0.jar:2.2.0]
        at org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:42) [artemis-commons-2.2.0.jar:2.2.0]
        at org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:31) [artemis-commons-2.2.0.jar:2.2.0]
        at org.apache.activemq.artemis.utils.actors.ProcessorBase$ExecutorTask.run(ProcessorBase.java:53) [artemis-commons-2.2.0.jar:2.2.0]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [?:1.8.0_181]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [?:1.8.0_181]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_181]

为了避免这个问题,我将流程的执行划分为更多步骤,并在每次执行中调用它 n 次(在本例中为 6 次)处理 500 个输出状态。

该解决方案有效,但是有更好/有效的解决方案来解决此问题吗?

先感谢您。

标签: blockchaincorda

解决方案


此错误表示您尝试发送的消息超出了网络的最大消息大小。

从 Corda 3.x 开始,这个最大消息大小被硬编码为 10MB(10,485,760 字节)。

在 Corda 的未来版本中,网络运营商将能够配置网络的最大消息大小作为网络参数的一部分。

设置最大消息大小的目的是防止大节点通过强制它们处理过大的消息来欺负较小的节点。


推荐阅读