7

मेरे पास एक कतार चैनल है, और एक कतार से एक परामर्शदाता के साथ एक सेवा सक्रियकर्ता है जो उस कतार से पढ़ता है। मैं कॉन्फ़िगरेशन कहना चाहता हूं कि "मैं चाहता हूं कि 50 धागे उस कतार को मतदान करें, और हर बार जब आप मतदान करते हैं और एक संदेश वापस लेते हैं, तो इस धागे पर, सर्विस-एक्टिवेटर को सेवा प्रदान करते हैं।"वसंत एकीकरण - समवर्ती सेवा सक्रियकर्ता

सेवा में @Async एनोटेशन नहीं है, लेकिन एक समवर्ती फैशन में चलाने के लिए स्टेटलेस और सुरक्षित है।

क्या नीचे यह किया जाएगा? क्या इसे प्राप्त करने के अन्य पसंदीदा तरीके हैं?

<int:channel id="titles"> 
    <int:queue/> 
</int:channel> 

<int:service-activator output-channel="resolvedIds" ref="searchService" method="searchOnTitle" input-channel="titles"> 
    <int:poller fixed-delay="100" time-unit="MILLISECONDS" task-executor="taskExecutor"></int:poller> 
</int:service-activator> 

<task:executor id="taskExecutor" pool-size="50" keep-alive="120" /> 

उत्तर

8

हाँ मुझे लगता है कि यह वही करता है जो आप चाहते हैं। एक बार जब आप QueueChannel पेश करते हैं तो इंटरैक्शन एसिंक बन जाता है - आपको @Async की आवश्यकता नहीं है। यदि आप स्पष्ट रूप से एक प्रदूषक सेट अप नहीं करते हैं तो यह डिफ़ॉल्ट प्रदूषक का उपयोग करेगा।

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

आपके द्वारा कॉन्फ़िगरेशन की अपेक्षा के अनुसार काम करेगा। एकमात्र मुद्दा यह है कि एक बार जब आप प्रत्येक अंत बिंदु के लिए निष्पादक और परागकों को बनाना शुरू करते हैं तो पूरे एप्लिकेशन के लिए इष्टतम कॉन्फ़िगरेशन को समझना मुश्किल हो जाता है। कुछ विशिष्ट चरणों के लिए इस तरह के अनुकूलन करना ठीक है - लेकिन सभी अंतराल के लिए नहीं (आपके प्रश्नों में से कुछ भी नहीं बताता है कि आप इसे कर रहे हैं, बस सोचा कि मैं इसे उठाऊंगा।