Corda RPC:从 RPC 返回的热可观察量从未被订阅



我基于 Java 模板构建了一个 CorDapp。最重要的是,我创建了一个 React 前端。现在,我想从前端启动一个流。为此,我修改了模板服务器,以便控制器启动我的流程:

@GetMapping(value = "/templateendpoint", produces = "text/plain")
private String templateendpoint() {
proxy.startTrackedFlowDynamic(issueTokens.class, 30, "O=Bob, L=Berlin, C=DE");
return "The flow was started";  
}

此操作会启动向 Bob 颁发 30 个令牌的流。我可以通过查询 Bob 的保管库看到流是成功的。但是,我在模板服务器上收到以下错误:

RPCClientProxyHandler.onRemoval - A hot observable returned from an RPC was never subscribed to.
This wastes server-side resources because it was queueing observations for retrieval.
It is being closed now, but please adjust your code to call .notUsed() on the observable to close it explicitly. (Java users: subscribe to it then unsubscribe). 
If you aren't sure where the leak is coming from, set -Dnet.corda.client.rpc.trackRpcCallSites=true on the JVM command line and you will get a stack trace with this warning.

在第一个事务之后,我无法启动另一个流。.notUsed(( 方法仅适用于 Kotlin。但是,我找不到订阅然后取消订阅可观察量的工作方法。

谁能给我一个关于如何使用Corda流程实现这一点的例子?此外,将信息从前端传递到控制器类的最实用方法是什么,以便将其用作流参数?

出现错误的原因是客户端上的可观察对象被垃圾回收。

提供的解决方案已在括号中提供-(Java 用户:订阅然后取消订阅(

因此,在您的情况下,您可以执行以下操作:

Subscription subs = updates.subscribe();
subs.unsubscribe();

可能更实用的方法是将可观察实例保留为私有属性 - 这样它就不会被垃圾收集。

private Observable observable;

参考: https://docs.corda.net/docs/corda-os/4.4/clientrpc.html#observables

最新更新