【发布时间】:2015-04-21 13:19:36
【问题描述】:
我无法解释 SNMP4J 的一些诡异行为。这可能是由于我对 snmp 基础知识的误解。
我处理接收 snmp 陷阱的服务器。一切进展顺利。现在我需要改变陷阱来通知。 问题是我的服务器试图两次处理收到的消息。我发生了重复 INFORM 消息。
试图解释...我已将记录器启用到调试级别。 当 INFORM 到达时,我在日志文件中看到来自 org.snmp4j.transport.DefaultUdpTransportMapping.ListenThread 类的两条相同记录,在 run() 方法中有以下代码:
if (logger.isDebugEnabled()) {
logger.debug("Received message from "+packet.getAddress()+"/"+
packet.getPort()+
" with length "+packet.getLength()+": "+
new OctetString(packet.getData(), 0,
packet.getLength()).toHexString());
}
我也有实现接口 org.snmp4j.CommandResponder 的类。他的方法 void processPdu(CommandResponderEvent event) 被调用两次用于通知,一次用于陷阱。
@Override
public void processPdu(final CommandResponderEvent evt) {
final Address address = getAgentAddress(evt);
final PDU command = evt.getPDU();
boolean isInform = command.getType() == PDU.INFORM // this is true for both invocations of this method while receiving INFORM
}
版本详情: snmp v2、snmp4j 版本 2.3.0
帮助我意识到:这里是否存在一些错误,例如我应该通过 command.getRequestID() 过滤 processPdu 方法的第二次调用?
【问题讨论】: