Thursday 15 April 2010

java - How ResponseListener works in snmp4j -



java - How ResponseListener works in snmp4j -

i have written simple programme understand how snmp4j asynchronous request/response works:

transportmapping transport = new defaultudptransportmapping(); snmp snmp = new snmp(transport); transport.listen(); address targetaddress = genericaddress.parse("udp:192.168.1.116/161"); communitytarget target = new communitytarget(); target.setaddress(targetaddress); target.setcommunity(new octetstring("nid")); target.setretries(0); target.settimeout(30000); target.setversion(snmpconstants.version2c); responselistener listener = new responselistener() { @override public void onresponse(responseevent event) { ((snmp) event.getsource()).cancel(event.getrequest(), this); system.out.println("received response pdu is: " + event.getresponse()); system.out.println("response listener thread id: " + thread.currentthread().getid()); system.out.println("**********************************"); seek { thread.sleep(5000); } grab (interruptedexception ex) { logger.getlogger(main.class.getname()).log(level.severe, null, ex); } } }; system.out.println("main thread id: " + thread.currentthread().getid()); (int = 0; < 10; i++) { pdu pdu1 = new pdu(); pdu1.add(new variablebinding(new oid("1.3.6.1.4.1.22420.2.5.3.1.1.1"))); pdu1.add(new variablebinding(new oid("1.3.6.1.4.1.22420.2.5.3.1.1.2"))); pdu1.settype(pdu.get); snmp.send(pdu1, target, null, listener); } thread.sleep(100000);

sample output this:

main thread id: 1 received response pdu is: response[requestid=205585942, errorstatus=success(0), errorindex=0, vbs[1.3.6.1.4.1.22420.2.5.3.1.1.1 = 1; 1.3.6.1.4.1.22420.2.5.3.1.1.2 = 2]] response listener thread id: 8 ********************************** received response pdu is: response[requestid=205585943, errorstatus=success(0), errorindex=0, vbs[1.3.6.1.4.1.22420.2.5.3.1.1.1 = 1; 1.3.6.1.4.1.22420.2.5.3.1.1.2 = 2]] response listener thread id: 8 ********************************** received response pdu is: response[requestid=205585944, errorstatus=success(0), errorindex=0, vbs[1.3.6.1.4.1.22420.2.5.3.1.1.1 = 1; 1.3.6.1.4.1.22420.2.5.3.1.1.2 = 2]] response listener thread id: 8 ********************************** received response pdu is: response[requestid=205585945, errorstatus=success(0), errorindex=0, vbs[1.3.6.1.4.1.22420.2.5.3.1.1.1 = 1; 1.3.6.1.4.1.22420.2.5.3.1.1.2 = 2]] response listener thread id: 8 ********************************** received response pdu is: response[requestid=205585946, errorstatus=success(0), errorindex=0, vbs[1.3.6.1.4.1.22420.2.5.3.1.1.1 = 1; 1.3.6.1.4.1.22420.2.5.3.1.1.2 = 2]] response listener thread id: 8 ********************************** received response pdu is: response[requestid=205585947, errorstatus=success(0), errorindex=0, vbs[1.3.6.1.4.1.22420.2.5.3.1.1.1 = 1; 1.3.6.1.4.1.22420.2.5.3.1.1.2 = 2]] response listener thread id: 8 ********************************** received response pdu is: null response listener thread id: 9 ********************************** received response pdu is: response[requestid=205585948, errorstatus=success(0), errorindex=0, vbs[1.3.6.1.4.1.22420.2.5.3.1.1.1 = 1; 1.3.6.1.4.1.22420.2.5.3.1.1.2 = 2]] response listener thread id: 8 ********************************** received response pdu is: null response listener thread id: 9 ********************************** received response pdu is: response[requestid=205585950, errorstatus=success(0), errorindex=0, vbs[1.3.6.1.4.1.22420.2.5.3.1.1.1 = 1; 1.3.6.1.4.1.22420.2.5.3.1.1.2 = 2]] response listener thread id: 8 **********************************

output shows multiple thread ids. means response packets processed in parallel. right? 2 responses thread id 9 homecoming null. there reason it? don't when working synchronous model. because thread.sleep within responselistener. if can't blocking work within responselistener , want process responses in parallel need add together executerservice?

snmp4j uses thread pools internally process messages. responselisteners's onresponse() called threads, thread ids you're seeing. unlike in synchronous mode executed in own thread.

the null homecoming value means finished in timeout. , yes, guess it's because you're sleeping 5 seconds in responselistener, blocks 1 of message-receiving thread.

as executorservice, thought move processing load out of snmp4j message threads own code, can command queue, etc. alternatively can utilize synchronized list , counting semaphore wake thread process received messages.

java multithreading asynchronous snmp snmp4j

No comments:

Post a Comment