2015-10-18 12 views
5

मैं गए प्रश्न/स्पष्टीकरण-टू-मेक एसआई प्रवेश द्वार सुविधा के बारे में:स्प्रिंग एकता गेटवे उत्तर चैनल जब विधि वापसी शून्य है

मेरी प्रवेश द्वार इंटरफेस नीचे के रूप में परिभाषित किया गया है:

public interface MyGateway{ 
    public void myGatewayMethod(Message<?> inMessage); 
} 

और मेरे प्रवेश द्वार विन्यास नीचे परिभाषित किए गए:

<int:gateway id="mySvcGateway" 
       service-interface="com.myCompany.myPkg.MyGateway" 
       error-channel="globalExceptionHandlerChannel"> 

     <int:method name="myGatewayMethod" request-channel="myGatewayReqChannel" />  
    </int:gateway> 

मेरे सवालों का/स्पष्टीकरणों करने वाली मेकअप कर रहे हैं:

1) चूंकि गेटवे सेवा इंटरफ़ेस विधि शून्य लौट रही है, क्या गेटवे प्रॉक्सी बीन अभी भी "डिफ़ॉल्ट-उत्तर-चैनल" या उपयोगकर्ता को "उत्तर-चैनल" परिभाषित करने पर प्रतिक्रिया की तलाश करता है?

2) दूसरे शब्दों में, क्या मुझे अभी भी reply-channel="nullChannel" (या default-reply-channel="nullChannel") का उल्लेख करने की आवश्यकता है?

या

के बाद विधि वापसी शून्य है, प्रवेश द्वार स्वचालित रूप से समझ जायेंगे कोई जवाब चैनल को सुनने के लिए?

3) क्या मैं अभी भी इस कॉन्फ़िगरेशन में reply-timeout विशेषता जोड़ सकता हूं या कोई जवाब नहीं मिलने के बाद से यह समझ में नहीं आता है?

समान संदर्भ में, अगर मैं नीचे के रूप में सेवा इंटरफ़ेस विधि में एक और पद्धति जोड़ें:

public interface MyGateway{ 
     public void myGatewayMethod(Message<?> inMessage); 
     public Object myGatewayMethod2(Message<?> inMessage); 
    } 

और नीचे के रूप में मेरे प्रवेश द्वार config में इस पद्धति जोड़ें:

<int:gateway id="mySvcGateway" 
        service-interface="com.myCompany.myPkg.MyGateway" 
        error-channel="globalExceptionHandlerChannel"> 

      <int:method name="myGatewayMethod" request-channel="myGatewayReqChannel" /> 
<int:method name="myGatewayMethod2" request-channel="myGatewayReqChannel2" /> 
     </int:gateway> 

4) इस में अगर मुझे विश्वास होगा कि मुझे reply-channel को परिभाषित करने की ज़रूरत है, तो सही?

5) default-reply-channel इस मामले के लिए काम नहीं कर सकता है क्योंकि एक विधि गेटवे प्रतिक्रिया की अपेक्षा करता है और अन्य के लिए नहीं, सही?

6) यदि हां, तो विधि को रद्द करने के लिए, क्या मुझे स्पष्ट रूप से reply-channel="nullChannel" का उल्लेख करने की आवश्यकता है?

पुष्टि करने के लिए धन्यवाद।

+0

कोई व्यक्ति उपर्युक्त स्पष्टीकरण पर मेरी मदद कर सकता है? Artem/गैरी - अपने तरह के attn के लिए खोज रहे हैं! बहुत धन्यवाद ! – lbvirgo

+0

ठीक है, ललित। मैं आपका प्रश्न अभिनीत कर रहा हूं और आज एक नज़र डालें :-) –

उत्तर

3

ललित!

प्रश्न का इतना बड़ा समूह धन्यवाद और मुझे आश्चर्य है कि वे सभी गेटवे के void विधि के आसपास हैं।

उन सभी के लिए जल्दी उचित जवाब है:

है जब से हम इस मामले पर संदर्भ मैनुअल कुछ भी कहना नहीं है, वहाँ इस तरह के एक विन्यास के लिए कोई चिंता नहीं है और यह
से अपेक्षा के अनुरूप काम करना चाहिए वसंत एकीकरण में विश्वास।

मैं थोड़ी मजाक कर रहा हूं, लेकिन हर मजाक में सच्चाई का हिस्सा है।

अब GatewayProxyFactoryBean के स्रोत कोड के लिए एक नज़र डालें:

private Object invokeGatewayMethod(MethodInvocation invocation, boolean runningOnCallerThread) throws Exception { 
    .......... 
    boolean shouldReply = returnType != void.class; 
    .................. 
     Object[] args = invocation.getArguments(); 
     if (shouldReply) { 
      response = shouldReturnMessage ? gateway.sendAndReceiveMessage(args) : gateway.sendAndReceive(args); 
     } 
     else { 
      gateway.send(args); 
      response = null; 
     } 
    } 
    return (response != null) ? this.convert(response, returnType) : null; 
} 

कहाँ

this.messagingTemplate.convertAndSend(requestChannel, object, this.historyWritingPostProcessor); 

जो void है, भी, और बस अंत MessageChannel.send() में कॉल करने के लिए MessagingGatewaySupport.send() प्रतिनिधियों।

जैसा कि आप अनुमान लगा सकते हैं कि इस विधि को replyChannel और replyTimeout पर कोई परवाह नहीं है।

तार्किक रूप से यह मानता है कि उन विकल्पों बस और अन्य तरीकों void वापसी प्रकार के साथ उन लोगों को प्रभावित नहीं करती किसी भी default-*void विधि के लिए नजरअंदाज कर दिया जाएगा।

आशा है कि मैं स्पष्ट हूं।

+0

कई टीएक्स आर्टम; आपकी स्पष्टीकरण क्रिस्टल स्पष्ट हैं! लेकिन फिर मैं गैर-शून्य विधि के लिए "answerTimeout" प्रदान करने वाले शून्य विधियों के लिए कार्यक्षमता का समय कैसे प्राप्त कर सकता हूं? मैं नहीं चाहता कि मेरे धागे लंबे समय तक प्रसंस्करण के समय अनावश्यक रूप से फंस जाएं। इसके अलावा मैं किसी भी प्रकार के इनबाउंड चैनल एडेप्टर का उपयोग करने से बचना चाहता हूं। – lbvirgo

+0

जब हम उत्तर की प्रतीक्षा करते हैं, तो हमें वास्तव में 'async' मामले में टाइमआउट की आवश्यकता होती है। यदि आपका अनुरोध-उत्तर केस सिंक है तो इसमें कोई भी टाइमआउट शामिल नहीं होगा। फंसे हुए थ्रेड के लिए इससे कोई फर्क नहीं पड़ता कि यह 'भेजना' या 'प्रेषण' का 'प्रेषण' हिस्सा है या नहीं। एसआई के बिना अपने उपयोग-मामले की कल्पना करने का प्रयास करें और आप देखेंगे कि थ्रेड को रोकने के लिए आपकी मदद करने के लिए कोई उपकरण नहीं है। –

+0

कभी-कभी हम अनावश्यक जटिलताओं से बचकर अपना जीवन आसान बना सकते हैं! :) धन्यवाद Artem! – lbvirgo

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