1

我目前有一个应用程序,当我的程序无法访问外部 API 时会引发 SNMP 警报。当我成功地从 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 协议本身是否处理重复警报并且不发送到网络。

4

1 回答 1

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

于 2017-11-23T15:16:07.487 回答