Corda 调试流似乎真的很痛苦

Corda 调试流似乎真的很痛苦,corda,Corda,在调试流时,我遇到了严重的生产力问题。在这一点上,我只能假设是由于我缺乏知识;特别有效的流调试技术。当我有一个流需要“等待”特定状态的消耗时,问题就会出现。似乎发生的是等待流启动并等待指定状态的使用,但尽管实现为具有关联回调的侦听未来(此时,我只是对从“WhenConsumed”返回的未来使用getOrThrow),流刚刚挂起,我在控制台窗口中看到数百条Artemis发送/写入消息。如果我停止调试会话,删除节点构建目录,重新部署节点,然后再次启动流重新启动,我就可以返回到故障点。但是,如果我只是

在调试流时,我遇到了严重的生产力问题。在这一点上,我只能假设是由于我缺乏知识;特别有效的流调试技术。当我有一个流需要“等待”特定状态的消耗时,问题就会出现。似乎发生的是等待流启动并等待指定状态的使用,但尽管实现为具有关联回调的侦听未来(此时,我只是对从“WhenConsumed”返回的未来使用getOrThrow),流刚刚挂起,我在控制台窗口中看到数百条Artemis发送/写入消息。如果我停止调试会话,删除节点构建目录,重新部署节点,然后再次启动流重新启动,我就可以返回到故障点。但是,如果我只是停止调试器并将其与节点分离,然后尝试运行调用测试(通过RPC调用流),那么似乎什么也不会发生。这几乎就像流代码(此时可能不正确)导致StateMachine/消息传递层陷入某种状态循环中一样,这只能通过擦除节点构建目录并重新部署来解决。只需重新启动节点就会导致流不再执行。这是一个真正的生产力杀手,所以我写这个问题是希望和假设我错过了一个明显的技巧,如何以避免重复重新部署节点的方式有效地测试/调试流。
如果有人能解释如何有效地调试流,那就太好了;尤其是依赖于vault更新并因此等待valut更新事件的流。我曾考虑过使用一个子流,但这最终(我相信?)不会产生所需的功能;也就是说,当一个节点使用一个已识别的状态时,会触发一个流。也许会?这个问题可能是因为没有使用子流???无论如何,我期待着你的想法

不确定您的特定用例。但总的来说,, 在实际运行节点之前,我会尽可能多地进行单元测试,看看流程是否有效。
Corda提供三个级别的单元测试:事务/分类账DSL、模拟网络和驱动程序DSL。因此,如果操作正确,流中的大多数错误(如果不是全部的话)应该在运行节点时得到解决。实际的运行节点大多只是显示配置问题。

有关契约和流测试的一些示例,请参阅。谢谢。碰巧我已经开始考虑测试DSL,但是我有一些(可能是错误的)怀疑我是否能够以这种方式测试我的流的所有方面。您的评论提供了一定程度的保证,因此我将花一些时间使用模拟网络和驱动程序DSL。非常感谢。我尝试了DSL测试,并意识到答案与我的实际问题无关;抱歉,这不是一个关于“如何测试Corda”的问题。特别是如何避免由于rpc断开连接而导致Artemis错误后节点挂起。在调试会话期间,节点通常无法从异常中恢复,这导致必须手动关闭节点并重新启动它们;通常,我在控制台窗口中看到许多Artemis错误,此时节点实际上是隔离的。将在适当的时候发布一个关于这个问题的详细问题和日志文件。R3的空闲时间将是一个更好的讨论场所。这里的格式是问答。