Я разрабатываю приложение 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);
}
Я пытаюсь использовать функцию getSession при реализации rpc следующим образом:
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;
}
У меня также есть функция init, которая вызывается из проекта автоматически при запуске пакета.
public void init() {
System.out.println("INIT STARTED");
getSession("device1", "1.1.1.1", 2022);
}
Моя проблема в том, что startNeConnect () внутри функции init работает правильно (т.е.) clientFuture.get () возвращает результат будущего. Но тот же самый вызов функции внутри rpc не работает бесполезно. clientFuture.get () ничего не возвращает и продолжает блокировать.
Почему это происходит? Я даже пытался добавить отдельные темы, тайм-ауты. Но это не решается.
UPDATE ::: Два объекта Future, использованные в приведенных выше фрагментах, взяты из разных пакетов. Возвращаемый тип rpc имеет тип java.util.concurrent.Future. Будущее, используемое в getSession, имеет тип io.netty.util.concurrent.Future.