簡體   English   中英

Apache Camel SNMP 組件

[英]Apache Camel SNMP Component

目前我正在做一個項目,我接收 OPC UA 數據並通過 SNMP 將它們發送到 PRTG 監控系統。 我已經在 OPC UA 數據點和 SNMP 客戶端(具有唯一的 OID)之間創建了路由。 這里的問題是與 PRTG 監控系統的連接。 當我開始連接時,我在 SnmpTrapProducer 上收到 NullPointer 異常。 似乎我無法在 SNMPTrapProducer.java 中創建 PDU 類型的陷阱

我發現在 SnmpTrapProducer.process(Exchange exchange) 中創建的 PDU 陷阱返回 NullPointerException(您可以在圖片中看到類的部分)。 我嘗試了不同的方法,例如更改消息正文類型或不同的端口以及 IP 地址。 但我仍然得到 NullPointerException。

我必須配置什么才能使陷阱不返回 NullPointer 異常?

部分代碼的圖像

SnmpTrapProducer.java

...
PDU trap = exchange.getIn().getBody(PDU.class);

trap.setErrorIndex(0);
trap.setErrorStatus(0);
trap.setMaxRepetitions(0);
...

以下代碼是Camel Route的配置

from("milo-client:opc.tcp://"
                + OpcConfiguration.getIpAdress() + ":"
                + OpcConfiguration.getPort()
                + "?node=RAW(" + snmpOidDataStructure.getOpcDataStructure().getNodeId() + ")&allowedSecurityPolicies=None")
                .to("stream:out")
                .to("snmp://10.3.248.12:5700?protocol=udp&type=TRAP&snmpVersion=1&oids=" + snmpOidDataStructure.getOid());

來自 OPC 組件的消息正文如下所示:

{value=Variant{value=[LocalizedText{text=CP, locale=de}, LocalizedText{text=Video, locale=de}, LocalizedText{text=Notfallsäule, locale=de}, LocalizedText{text=CP Notruf 2 [Gleis 2], locale=de}, LocalizedText{text=, locale=de}]}, status=StatusCode{name=Good, value=0x00000000, quality=good}, sourceTime=DateTime{utcTime=131999719975360000, javaDate=Wed Apr 17 12:53:17 CEST 2019}, serverTime=DateTime{utcTime=132164793099138549, javaDate=Fri Oct 25 14:15:09 CEST 2019}}

錯誤信息:

java.lang.NullPointerException: null
        at org.apache.camel.component.snmp.SnmpTrapProducer.process(SnmpTrapProducer.java:112) ~[Schnittstellenadapter-1.0-SNAPSHOT-shaded.jar:1.0-SNAPSHOT]
        at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61) ~[Schnittstellenadapter-1.0-SNAPSHOT-shaded.jar:1.0-SNAPSHOT]
        at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:148) ~[Schnittstellenadapter-1.0-SNAPSHOT-shaded.jar:1.0-SNAPSHOT]
        at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548) ~[Schnittstellenadapter-1.0-SNAPSHOT-shaded.jar:1.0-SNAPSHOT]
        at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201) [Schnittstellenadapter-1.0-SNAPSHOT-shaded.jar:1.0-SNAPSHOT]
        at org.apache.camel.processor.Pipeline.process(Pipeline.java:138) [Schnittstellenadapter-1.0-SNAPSHOT-shaded.jar:1.0-SNAPSHOT]
        at org.apache.camel.processor.Pipeline.process(Pipeline.java:101) [Schnittstellenadapter-1.0-SNAPSHOT-shaded.jar:1.0-SNAPSHOT]
        at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201) [Schnittstellenadapter-1.0-SNAPSHOT-shaded.jar:1.0-SNAPSHOT]
        at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:97) [Schnittstellenadapter-1.0-SNAPSHOT-shaded.jar:1.0-SNAPSHOT]
        at org.apache.camel.component.milo.client.MiloClientConsumer.handleValueUpdate(MiloClientConsumer.java:78) [Schnittstellenadapter-1.0-SNAPSHOT-shaded.jar:1.0-SNAPSHOT]
        at org.eclipse.milo.opcua.sdk.client.subscriptions.OpcUaMonitoredItem.lambda$setValueConsumer$0(OpcUaMonitoredItem.java:133) ~[Schnittstellenadapter-1.0-SNAPSHOT-shaded.jar:1.0-SNAPSHOT]
        at org.eclipse.milo.opcua.sdk.client.subscriptions.OpcUaMonitoredItem.onValueArrived(OpcUaMonitoredItem.java:191) ~[Schnittstellenadapter-1.0-SNAPSHOT-shaded.jar:1.0-SNAPSHOT]
        at org.eclipse.milo.opcua.sdk.client.subscriptions.OpcUaSubscriptionManager.lambda$null$39(OpcUaSubscriptionManager.java:700) ~[Schnittstellenadapter-1.0-SNAPSHOT-shaded.jar:1.0-SNAPSHOT]
        at org.eclipse.milo.opcua.stack.core.util.ExecutionQueue$PollAndExecute.run(ExecutionQueue.java:107) ~[Schnittstellenadapter-1.0-SNAPSHOT-shaded.jar:1.0-SNAPSHOT]
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) ~[na:1.8.0_221]
        at java.util.concurrent.FutureTask.run(Unknown Source) ~[na:1.8.0_221]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) ~[na:1.8.0_221]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) ~[na:1.8.0_221]
        at java.lang.Thread.run(Unknown Source) ~[na:1.8.0_221]

任何幫助是極大的贊賞

SnmpTrapProducer拋出 NPE,因為消息正文似乎是空的

如您的圖片所示,問題在於變量trap保持為null 它應該成為這條線上的一個對象。

PDU trap = exchange.getIn().getBody(PDU.class);

該行獲取消息正文內容,並希望它是org.snmp4j.PDU一個實例。

不幸的是,您沒有顯示填充消息正文的代碼,但我假設消息正文只是 empty

嘗試在將路由中的消息正文傳遞給 SNMP 組件之前注銷它

 .log("Message body: ${body}") 

另一種選擇是消息正文的類型不同於org.snmp4j.PDU ,但我認為它會拋出TypeConversionException

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM