2016-08-09 16 views
5

का थ्रॉटल भाग मेरे पास एक जेएमएस कतार है। संदेश प्राप्त करने के बाद इसे डीबी में संग्रहीत करने की आवश्यकता है। फिर कुछ शर्त के आधार पर मैं इस संदेश को निश्चित दर के साथ तीसरे पक्ष की सेवा में भेजना चाहता हूं, इसलिए मैं थ्रॉटलिंग का उपयोग करता हूं।अपाचे कैमल। रूट

from("jms:queue") 
      .bean(persistingListener) 
      .choice() 
       .when(some condition ..) 
        .throttle(5) 
        .asyncDelayed() 
        .bean(thirdPartyServiceClient) 
      .endChoice(); 

हालांकि, पूरे मार्ग से रोक दिए हो जाता है, नहीं तृतीय पक्ष सेवा ग्राहक से संबंधित हिस्सा:

मैं निम्नलिखित मार्ग की है। मेरा मतलब है कि अगर मैं कतार में 100 संदेश डालता हूं, तो केवल पहले 5 पढ़ा जाएगा। इसलिए, इस मामले में उन संदेशों की प्रसंस्करण जो तीसरे पक्ष की सेवा की आवश्यकता नहीं है, देरी हो रही है।

तीसरे पक्ष की सेवा से संबंधित हिस्से पर केवल थ्रॉटल करने के बारे में कोई विचार? जहां प्रत्येक JMS संदेश अनुक्रम में संसाधित किया जाता है

अग्रिम

+0

इस बात की संभावना है कि आपके हालत हमेशा सच है? आपको समय विंडो भी निर्दिष्ट करनी चाहिए। – alobodzk

+0

@alobodzk, ठीक है, ऐसा कोई मौका नहीं है और मुझे लगता है कि इससे कोई फर्क नहीं पड़ता। डिफ़ॉल्ट रूप से थ्रॉटल टाइम विंडो 1 सेकंड पर सेट है। – StasKolodyuk

+0

जेएमएस एंडपॉइंट पर asyncConsumer = true सेट करें। इसके दस्तावेज़ देखें: http://camel.apache.org/jms –

उत्तर

2

JMS endpoint धन्यवाद डिफ़ॉल्ट रूप से एक मोड में चलाता है। यदि आप एसिंक्रोनस प्रोसेसिंग के कारण संदेशों (ऑर्डर के बाहर) को संसाधित करने की अनुमति देना चाहते हैं, तो आपको एंडपॉइंट पर asyncConsumer=true को कॉन्फ़िगर करके इस व्याख्या को सक्षम करने की आवश्यकता है।

JMS दस्तावेज में अधिक विवरण देखें: http://camel.apache.org/jms

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