我正在尝试写一个基于UaMonitor oredItem及其setValueConsumer(ValueConsumer ValueConsumer)方法的内部应用事件日志。是否可以过滤掉setValueConsumer(ValueConsumer ValueConsumer)方法“初始化”/“首次使用”后,而不是在“初始化”/“第一次使用”过程中进入UaMonitor oredItems的事件?在这种情况下,使用托管数据项或托管事件项是一个好的做法吗?
代码例如:
public void subscribeOnComponentsEvent(List list) {
//....
//Created in MonitoringMode.Sampling to avoid race condition
for (UaMonitoredItem item : monitoredItems) {
allMonitoredItems.add(item);
item.setValueConsumer((e, vs) -> {
logger.info("Received from {}", e.getReadValueId().getNodeId());
});
}
}
public void setMonitoringMode(MonitoringMode mode) {
try {
subscription.setMonitoringMode(mode, allMonitoredItems).get();
} catch (InterruptedException | ExecutionException e) {
logger.error(e.getMessage());
}
}
public static void main(String[] args) {
//...
client.subscribeOnComponentsEvent(list);
client.setMonitoringMode(MonitoringMode.Reporting);
}
代码示例的输出:
[milo-shared-thread-pool-3] INFO client.Client - Received from NodeId{ns=1, id=state_open}
[milo-shared-thread-pool-3] INFO client.Client - Received from NodeId{ns=1, id=state_closed}
[milo-shared-thread-pool-3] INFO client.Client - Received from NodeId{ns=1, id=state_alarm}
当应用程序启动时,此代码立即启动,因此,来自可能已在日志中的监视器的数据将被重写到日志中。
有什么方法可以避免将数据重写到日志中吗?
1条答案
按热度按时间ctrmrzij1#
这段代码不会立即启动或运行,它只会在创建Monitor Item并且服务器发送通知后运行。