需要共享corda节点间的静态可变映射

美好的一天,

我一直在试图改变从AMQP到FTL的corda框架的消息层。 我试图通过创建一个地图,我把一个InboxSubscriber对象关联到一个特定的p2p地址。 p2p地址只是一个字符串,可以从参数target:MessageRecipients中检索。 我在ArtemisMessagingServer类中添加了一个静态MutableMap,并添加了一个对应的InboxSubscriber对象,该对象由正在初始化的服务器的p2p地址进行了键入。 我曾希望这个地图将是一个所有的corda节点,但我注意到,实际上我有一个每个节点的地图,因此我无法获得其他节点相应的InboxSubscriber对象本身。 是否有一个特定的位置可以创建这个地图,然后由网络中的所有节点进行检索?

ArtemisMessagingServer.kt中的更改 NodeMessagingClient.kt中的更改

要共享这些信息,您需要创建一个Corda服务。 然后,该服务将被托管在该节点上,并且可以从其请求信息作为流程的一部分。

这里是一个提供服务的节点的示例 – 在这种情况下是一个素数的oracle: https : //github.com/corda/oracle-example 。 在build.gradle文件中,我们列出了NodeB提供的net.corda.examples.primes_oracle服务。

然后我们在这里定义服务: https : //github.com/corda/oracle-example/blob/master/service/src/main/kotlin/net/corda/examples/oracle/service/Oracle.kt ,以及流程在这里查询提供服务的节点: https : //github.com/corda/oracle-example/tree/master/service/src/main/kotlin/net/corda/examples/oracle/flow 。

本质上,该服务将是NodeB上的一个长寿命对象。 当其他节点查询它时,它从这个对象中提取信息,并将其作为流的一部分发送回其他节点。