Corda RPC:从RPC返回的可观察的热点从未订阅过

问题描述 投票:0回答:1

我基于Java Template构建了一个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 reactjs corda
1个回答
0
投票

出现此错误的原因是客户端上的Observable收集了垃圾。

提供的解决方案已在括号中提供-((Java用户:先订阅,然后退订)

因此,您可以执行以下操作:

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

[一种可能更实用的方法是将可观察的实例保留为私有属性-这样就不会进行垃圾回收。即

private Observables observable;

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

© www.soinside.com 2019 - 2024. All rights reserved.