2012-11-15 14 views
8

मैं प्रत्येक कतार से कतार और संदेश सूचीबद्ध करता हूं। निम्नलिखित मेरा कोड है। लेकिन, QueueBrowser संदेशों को सही तरीके से पुनर्प्राप्त नहीं करता है।QueueBrowser सभी संदेशों को वापस नहीं करता

मान लें कि मेरे पास टेस्टक्यूयू नामक एक कतार है जिसमें 1000 संदेश हैं।

पहली बार जब मैं अपना प्रोग्राम चलाता हूं तो यह केवल 200 संदेश दिखाता है। दूसरा - 400 तीसरे - 600 आगे - 800 पांचवें - 1000

क्या आप मुझे बता सकते हैं कि कैसे इस समस्या को ठीक करने के लिए?

ConnectionFactory out = new ActiveMQConnectionFactory("tcp://localhost:61616?jms.prefetchPolicy.all=10000"); 
ActiveMQConnection connection = (ActiveMQConnection) out.createConnection(); 

connection.start(); 
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 

Set<ActiveMQQueue> amqs = connection.getDestinationSource().getQueues(); 
Iterator<ActiveMQQueue> queues = amqs.iterator(); 

while (queues.hasNext()) 
{ 
    ActiveMQQueue queue_t = aqueues.next(); 
    String q_name = queue_t.getPhysicalName(); 
    List<ActiveMQMessage> msgList = ((ActiveMQSession) session).getUnconsumedMessages(); 

    System.out.println("\nQueue = " + q_name); 

    QueueBrowser queueBrowser = session.createBrowser(queue_t); 
    Enumeration e = queueBrowser.getEnumeration(); 

    int numMsgs = 0; 
    while(e.hasMoreElements()) 
    { 
     Message message = (Message) e.nextElement(); 
     numMsgs++; 
    } 
    System.out.println("No of messages = " + numMsgs); 
    queueBrowser.close(); 
}      
session.close(); 
connection.close(); 
+0

क्या आपने इस समस्या को हल किया? – rdmueller

+0

@ राल्फ, अभी तक नहीं। मैंने यह भी ध्यान दिया कि वेब कंसोल भी पहली बार 200 संदेश पुनर्प्राप्त कर सकता है। फिर, दोबारा ब्राउज़ करने की कोशिश करने के दूसरी बार, संदेश संख्या 400 तक बढ़ी। अगले 600, 800. मैंने वेब कंसोल कोड की जांच की और पाया कि यह क्यूईब्रोसर का भी उपयोग करता है। –

+0

मेरा वर्तमान समाधान स्वीकृति के बिना सभी संदेश का उपभोग करना है। इसलिए, मैं सभी संदेश प्राप्त कर सकता हूं और अभी भी उन्हें कतार में बनाए रखने में सक्षम हूं। लेकिन, मुझे लगता है कि यह विश्वसनीय नहीं है। अगला समाधान कतार को बार-बार ब्राउज़ करना है जब तक अधिकतम संदेश गणना पूरी नहीं हो जाती है। –

उत्तर

3
javax.jms.QueueBrowser एपीआई से

:

संदेश पहुंचने की जा सकती है और जब तक स्कैन किया जाता है या समाप्त हो रहे। जेएमएस एपीआई को कतार सामग्री की एक स्थिर स्नैपशॉट होने के लिए गणना की सामग्री की आवश्यकता नहीं होती है। चाहे ये परिवर्तन दिखाई दे या नहीं, जेएमएस प्रदाता पर निर्भर करता है।

क्या आपने prefetch policy निर्दिष्ट करने का प्रयास किया है?

+0

उत्तर के लिए धन्यवाद लेकिन प्रीफेच नीति जोड़ने के बाद व्यवहार समान है। मैंने प्रश्न में कोड संपादित किया। –

0

बस ब्रोकर को जेएमएक्स का उपयोग करके कनेक्ट करें (उदाहरण के लिए jconsole का उपयोग करें)। विशिष्ट कतार पर 200 से अधिक MaxPageSize गुण सेट करें, तो आप अधिक संदेश सूचीबद्ध कर सकते हैं।

संबंधित मुद्दे