我正在开发ODL应用程序。这是我杨家的rpc。
rpc device-connection-establishment {
input {
list device-list {
leaf device-id {
type string;
mandatory true;
}
leaf device-ip {
type inet:ip-address;
mandatory true;
}
leaf port {
type uint32;
}
}
}
}
getSession是我用Java编写的一个函数,该函数将在rpc中使用。此函数中包含一个将来的对象。 doSomethingWith()只是一个函数,在其中我对提供的参数进行了一些操作。
public void getSession(String deviceName, String ip, int port){
Config config = doSomethingwith(deviceName,ip,port);
io.netty.util.concurrent.Future<NetconfClientSession> clientFuture = netconfClientDispatcher.createClient(config);
NetconfClientSession clientSession = clientFuture.get();
System.out.println(clientSession);
}
我尝试通过以下方式在rpc的实现中使用getSession函数:
public java.util.concurrent.Future<RpcResult<DeviceConnectionEstablishmentOutput>> deviceConnectionEstablishment(
DeviceConnectionEstablishmentInput input) {
List<DeviceList> devices = input.getDeviceList();
for (DeviceList device : devices) {
String deviceName = device.getDeviceId();
IpAddress ip = device.getDeviceIp();
long port = input.getPort();
getSession(deviceName, ip.getIpv4Address().getValue(), (int) port);
}
return null;
}
我还有一个初始化函数,当捆绑包启动时,会自动从蓝图中调用该函数。
public void init() {
System.out.println("INIT STARTED");
getSession("device1", "1.1.1.1", 2022);
}
我的问题是,init函数中的startNeConnect()正常工作(即,clientFuture.get()返回将来的结果)。但是rpc内部的同一函数调用无法正常工作。 clientFuture.get()不返回任何内容,并保持阻塞状态。
为什么会这样?我什至尝试添加单独的线程,超时。但这还没有解决。
UPDATE :::以上摘录中使用的两个Future对象来自不同的程序包。 rpc的返回类型为java.util.concurrent.Future。 getSession中使用的future的类型为io.netty.util.concurrent.Future。