You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过FlowSession.send()方法向Receiver类传递多个变量?

关于Corda FlowSession.send()传递多个变量的问题

当然可以通过FlowSession.send()传递多个变量啦!你遇到的问题本质是发送和接收的调用次数不匹配导致的——你发起方发了两次,但接收方只接了一次,第二个变量自然没被处理到。

问题出在哪?

你在Payer类里调用了两次sessionWithRecipient.send(),但Receiver类里只写了一次initiatorSession.receive<Int>().unwrap(...),相当于只“接了第一份快递”,第二份还在传输队列里没人取,所以看起来只有第一个变量生效。

正确的处理方式

发起方(Payer)代码示例:

// 发送第一个变量
sessionWithRecipient.send(variable1)
// 发送第二个变量
sessionWithRecipient.send(variable2)

接收方(Receiver)代码示例:

// 先接收第一个Int类型变量
val variable1 = initiatorSession.receive<Int>().unwrap { it }
// 再接收第二个变量(根据实际类型调整泛型)
val variable2 = initiatorSession.receive<String>().unwrap { it } // 假设第二个是String类型

注意:每次send()都要对应一次receive(),而且泛型类型要和发送的变量类型严格匹配,不然会抛出类型不匹配的异常。

更优雅的方案:封装成数据类

如果要传递的变量比较多,或者是一组关联紧密的数据,建议把它们封装成一个自定义数据类,一次性发送:

  1. 先定义数据类(要确保这个类在双方节点的代码中都能访问到):
data class TransactionDetails(val amount: Int, val payerRef: String, val receiverRef: String)
  1. 发起方发送封装后的对象:
val details = TransactionDetails(variable1, variable2, variable3)
sessionWithRecipient.send(details)
  1. 接收方一次性接收并解析:
val transactionDetails = initiatorSession.receive<TransactionDetails>().unwrap { it }
val amount = transactionDetails.amount
val payerRef = transactionDetails.payerRef
// ... 按需提取其他变量

这种方式不仅代码更整洁,还能从根源上避免因发送/接收次数不一致导致的变量遗漏问题。

内容的提问来源于stack exchange,提问作者Jan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 10:06:02