Opendaylight-为什么Future在init方法中起作用,但在rpc内部不起作用?

时间:2018-11-18 08:09:48

标签: java future java.util.concurrent opendaylight

我正在开发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。

0 个答案:

没有答案