2010-08-16 27 views
5

मैं एक दूरस्थ कतार में संदेश भेज रहा हूं, जिसके लिए मेरा कोई नियंत्रण नहीं है।आईबीएम एमक संदेश हैडर

मैं संदेश के रूप में एक xml फ़ाइल भेज लेकिन जब आवेदन संदेश पढ़ता है यह कैसा

<mcd><Msd>jms_text</Msd></mcd> \0\0\0l<jms><Dst>queue:///TEST</Dst><Tms>1281475843707</Tms><Cid></Cid><Dlv>1</Dlv></jms> 

संदेश शीर्ष लेख मैं इस संदेश शीर्ष लेख मौजूद हो नहीं करना चाहती और भेजने इस संदेश है के लिए मेरे कोड हो जाता है निम्नानुसार है:

Properties props = new Properties(); 
    props.setProperty("java.naming.factory.initial",this.initialFactory); 
    props.setProperty("java.naming.provider.url", url); 

    Context context = new InitialContext(props); 

    QueueConnectionFactory qcf = (QueueConnectionFactory) context.lookup(this.context); 
    qConn = qcf.createQueueConnection(); 
    queue = (Queue)context.lookup(name); 
    qSession = qConn.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE); 
    qConn.start(); 
      QueueSender send = qSession.createSender(queue); 
    String text = "My xml file"; 
    TextMessage tm = qSession.createTextMessage(text); 
    send.send(tm); 
    send.close(); 

मैं इससे कैसे बचूं?

उत्तर

9

ऐसा प्रतीत होता है कि आप एक गैर jms गंतव्य पर एक jms संदेश भेज रहे हैं। गंतव्य पर संदेश कैसे खपत किया जा रहा है? क्या यह मूल एमक्यू संदेश की उम्मीद कर रहा है? रिसीवर एमक्यूआरएफएच 2 हेडर को समझ नहीं रहा है जो जेएमएस हेडर गुणों को संग्रहीत करता है।

आपको या तो jms को समझने के लिए गंतव्य को कॉन्फ़िगर करना चाहिए या आप एमसी जेएमएस को बताने के लिए निम्नलिखित की तरह कुछ कर सकते हैं कि आपका रिसीवर गैर-जेएम क्लाइंट है।

((com.ibm.mq.jms.MQQueue) queue).setTargetClient(JMSC.MQJMS_CLIENT_NONJMS_MQ); 
+0

हे धन्यवाद, यह कोशिश करते हैं और आप जानते हैं –

+0

जाने हे धन्यवाद होगा दोस्त यह काम करता है, मैंने बस आपके फिक्स की कोशिश की। अब मुझे समझना होगा कि इसका अर्थ क्या है –

+0

ठीक है, क्योंकि आपने प्रबंधित ऑब्जेक्ट को सेट करने के बजाय कोड में वर्कअराउंड किया है, इसका मतलब है कि उस गंतव्य पर जेएमएस संदेशों को भेजने वाले किसी भी अन्य ऐप्स या मॉड्यूल में भी वही समस्या होगी। इसे प्रशासित ऑब्जेक्ट्स (। बाइंडिंग फ़ाइल, एलडीएपी या जो कुछ भी) में सेट करें और यह उस प्रबंधित ऑब्जेक्ट का उपयोग करके कोड और सभी ऐप्स के बिना तय किया गया है। –

5

जेएमएस ऑब्जेक्ट्स as listed in the docs के गुणों पर नज़र डालें। प्रशासित वस्तु पर टैरग्लिएंट नामक एक संपत्ति होती है जिसे 'एमक्यू' पर सेट किया जाना चाहिए। यद्यपि आपके पास प्रशासित वस्तु पर कोई नियंत्रण नहीं हो सकता है, लेकिन यह उस व्यक्ति की ज़िम्मेदारी है जो प्रबंधित संपत्ति को इस संपत्ति को सही तरीके से सेट करने के लिए प्रशासित करती है। यदि गंतव्य आरएफएच 2 हेडर (जो डब्लूएमक्यू वी 6 जेएमएस गुणों को पकड़ने के लिए उपयोग करता है) को समझ में नहीं आता है तो किसी भी डब्लूएमक्यू जेएमएस एप्लीकेशन जो उस गंतव्य को संदेश भेजते हैं उस संपत्ति सेट को अवश्य रखना चाहिए।

संयोग से, यह तथ्य कि आपको यह समस्या है, यह इंगित करता है कि आवेदन लेने वाले संदेश अभी भी v6 पर हैं। कृपया ध्यान रखें कि WMQ का v6.0 सितंबर 2011 तक जीवन का अंत है। यदि आप QMgr और क्लाइंट साइड दोनों पर v7 पर स्विच करते हैं, तो आप इसे कतार पर सरल सेटिंग्स के साथ प्रबंधित कर सकते हैं। लीगेसी ऐप इस बात पर ध्यान दिए बिना संदेशों को समझ पाएगा कि उनके पास आरएफएच 2 संलग्न है या नहीं, क्लाइंट ऐप प्रतिक्रियाओं को जेएमएस संदेशों के रूप में देखेगा चाहे इस पर ध्यान दें कि विरासत ऐप आरएफएच 2 हेडर जोड़ता है या नहीं। अब v7 पर जाएं, अपने ऐप को इस ऐप को विकसित करने में पूरी तरह से परेशानी बचाएं और अगले वर्ष v7 में माइग्रेट करने से बचें।

WMQ v7 ग्राहक डाउनलोड के लिए उपलब्ध हैं here

अद्यतन: समाप्ति की जीवन WMQ V6 के लिए सितंबर तक स्थगित कर दिया गया 2012

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