我目前正在使用一个应用程序,当我的程序无法访问外部API时会引发SNMP ALARMS。当我成功从API获得回复时,我清除了警报。
以下是相同的代码。
// Call Webservice to check the external API is up or not
logger.debug("Sending trap data Clear Alarm {}" , trapData);
AlarmTrap.INTERFACE_SMSC_STATUS.clear(trapData);
}
catch(CustomException e)
{
AlarmTrap.INTERFACE_SMSC_STATUS.raise(trapData);
logger.error("Error " + e);
throw e;
}
正如你所看到的每一次成功的回应我正在清除警报。虽然SNMP服务器丢弃相同类型的警报,但对当前执行没有影响。我想知道这是不是好的做法。以及SNMP协议本身是否处理重复警报并且不会发送到网络。
答案 0 :(得分:1)
如果您不想为连续成功API响应发送重复警报,则可以创建一个AtomicBoolean类变量 - isErrorAlert,如果isErrorAlert = true,则只调用SNMP clear TRAP。
AtomicBoolean isErrorAlert = new AtomicBoolean();
try{
//API Success case
if(isErrorAlert.compareAndSet(true, false)){
//send clear trap only if the error case is occured
}
} catch(Exception e) {
//Fail case
isErrorAlert.set(true);
}
参考文献: https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicBoolean.html