首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Opendaylight流通知

Opendaylight流通知
EN

Stack Overflow用户
提问于 2015-12-19 05:11:42
回答 1查看 285关注 0票数 0

我正在编写一个Opendaylight应用程序,它将在删除、添加或更新流规则时提取所有流规则。

要在添加、删除或更新流时获得通知,应用程序应该提供一个扩展salFlowListener接口的侦听器。但是,当我创建应用程序目录结构时,Opendaylight在线教程中并不清楚逻辑要放在哪里。

此外,当使用YANG模型扩充通知服务时,存在编译错误。

这是获取通知的正确方法吗?是否有任何清晰的在线教程可供我参考?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2016-02-16 10:55:05

代码语言:javascript
复制
public class ChangeListener implements DataChangeListener {
private static final Logger logger = LoggerFactory.getLogger(DhcontrollerListener.class);
private DataBroker          dataBroker;

public DhcontrollerListener(DataBroker broker) {
    this.dataBroker = broker;

    //flow
    InstanceIdentifier<Flow> flowPath = InstanceIdentifier.builder(Nodes.class)
        .child(Node.class).augmentation(FlowCapableNode.class).child(Table.class)
        .child(Flow.class).build();
    dataBroker.registerDataChangeListener(LogicalDatastoreType.OPERATIONAL, flowPath, this,
        DataChangeScope.BASE);

}

@Override
public void onDataChanged(AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> change) {

    if (change == null) {
        logger.info("DhcontrollerListener ===>>> onDataChanged: change is null");
        return;
    }

    handleCreatedFlow(change);
    handleUpdatedFlow(change);
    handleDeletedFlow(change);

}

private void handleCreatedFlow(AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> change) {
    Map<InstanceIdentifier<?>, DataObject> createdData = change.getCreatedData();
    if (createdData == null) {
        logger.info("handleCreatedFlow ===>>> getRemovedPaths==null");
        return;
    }
    for (Map.Entry<InstanceIdentifier<?>, DataObject> entry : createdData.entrySet()) {
        final DataObject dataObject = entry.getValue();

        if (dataObject instanceof Flow) {
            Flow flow = (Flow) dataObject;
            logger.info("create flow :  " + flow.getCookie() + " " + flow.getKey().toString());
        }

    }
}

private void handleUpdatedFlow(AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> change) {
    Map<InstanceIdentifier<?>, DataObject> updatedData = change.getCreatedData();
    if (updatedData == null) {
        logger.info("handleUpdatedFlow ===>>> getRemovedPaths==null");
        return;
    }
    for (Map.Entry<InstanceIdentifier<?>, DataObject> entry : updatedData.entrySet()) {
        final DataObject dataObject = entry.getValue();

        if (dataObject instanceof Flow) {
            Flow flow = (Flow) dataObject;
            logger.info("update flow :  " + flow.getCookie() + " " + flow.getKey().toString());
        }

    }
}

private void handleDeletedFlow(AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> change) {
    Map<InstanceIdentifier<?>, DataObject> originalData = change.getOriginalData();
    Set<InstanceIdentifier<?>> removedData = change.getRemovedPaths();
    if (removedData == null) {
        logger.info("handleDeletedFlow ===>>> getRemovedPaths==null");
        return;
    }
    for (InstanceIdentifier<?> instanceIdentifier : removedData) {
        final DataObject dataObject = originalData.get(instanceIdentifier);

        if (dataObject instanceof Flow) {
            Flow flow = (Flow) dataObject;
            logger.info("remove flow :  " + flow.getCookie() + " " + flow.getPriority() + " "
                        + flow.getMatch().getIpMatch() + " " + flow.getKey().toString());
        }
    }
}

}

我要做的就是设置InstanceIdentifier。设置不同的InstanceIdentifier,还可以监听节点、表等的变化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34364035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档