2012-11-21 39 views
6

मुझे पता है कि संदेशों को प्राप्त करने के लिए कैमल का जेएमएस घटक, स्प्रिंग्स डिफॉल्ट मैसेज लिस्टरनर कंटेनर का उपयोग करता है। इसे संदेशों को स्वीकार करने के लिए CLIENT_ACKNOWLEDGE मोड का उपयोग करने के लिए कॉन्फ़िगर किया जा सकता है। मेरा सवाल यह है कि, जब वास्तव में message.acknowledge() विधि को बुलाया जाता है? क्या इसे वसंत के श्रोता कंटेनर द्वारा आंतरिक रूप से बुलाया जाता है?ऊंट, जेएमएस, CLIENT_ACKNOWLEDGE मोड

या क्या मैं किसी भी तरह से मेरी इच्छा पर संदेश स्वीकार कर सकता हूं?

मैं परिदृश्य है कि संदेशों खो जाना क्योंकि मेरे एप्लिकेशन इन संदेशों के प्रसंस्करण के दौरान दुर्घटनाग्रस्त हो गया है और यह व्यवहार कर रही है

उत्तर

8

ठीक मेरे लिए थोड़ा बहुत भारी लगता है से बचने के लिए चाहते हैं। कुछ डिबगिंग और स्कैनिंग थ्रूग स्रोत कोड के बाद मुझे पता चला है कि ऊंट वसंत संदेश लिस्टनरकंटर्स का उपयोग करता है। CLIENT_AKNOWLEDGE मोड के मामले में, सार मैसेज लिस्टरनर कंटेनर, संदेश स्वीकार करने के लिए comitIfNcessary विधि को आमंत्रित करता है। यह केवल पंजीकृत संदेशसूची के बाद संदेश को सफलतापूर्वक संसाधित करता है (कोई अपवाद नहीं)

ऊंट EndpointMessageListener का उपयोग करता है, जो अंततः, मार्ग के नीचे अगले प्रोसेसर (या निर्माता) की प्रक्रिया विधि का आह्वान करता है। चूंकि यह जिम्मेदारियों की क्लासिक श्रृंखला है, यदि मार्ग के नीचे कोई भी प्रोसेसर अपवाद फेंकता है या एक्सचेंज पर अपवाद सेट करता है, तो उसे EndpointMessageListener द्वारा फिर से फेंक दिया जाएगा, जिसे सारणी संदेश लिस्टनर को संदेश स्वीकार करने से रोक दिया जाता है।

+1

धन्यवाद मेरा समय बचाने के लिए ब्रो। – andrey

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

  • कोई संबंधित समस्या नहीं^_^