इस लेख का मॉड्यूल: Integration Flow Helper
SAP CPI में ProcessDirect और JMS: iFlows के बीच headers कैसे भेजें
SAP CPI में ProcessDirect और JMS से iFlows के बीच headers और exchange properties कैसे भेजें: मेल खाते addresses और queues, क्या पार होता है, और debug कैसे करें।

SAP CPI के बड़े integrations कई iFlows में बँटे होते हैं: एक receive करता है, दूसरे enrich, map या send करते हैं। ProcessDirect उसी tenant के किसी दूसरे iFlow को सीधे call करता है; JMS message को एक queue में रखता है जिसे कोई दूसरा iFlow बाद में पढ़ता है। दोनों में सवाल एक ही है: मेरे कौन-से headers और properties दूसरी तरफ़ पहुँचते हैं?
यह लेख बताता है कि दोनों connections कैसे सेट होते हैं, उनसे क्या पार होता है और क्या नहीं, और यह कैसे पता करें कि दो iFlows के बीच कोई value क्यों खो गई।
ProcessDirect: एक iFlow दूसरे को call करता है
Call करने वाला iFlow, यानी producer, ProcessDirect receiver adapter इस्तेमाल करता है। Call किया जाने वाला iFlow, यानी consumer, ProcessDirect sender adapter से शुरू होता है। दोनों में Address field होता है, और call तभी जुड़ती है जब address दोनों तरफ़ बिल्कुल एक जैसा हो, जैसे:
Producer iFlow -> ProcessDirect receiver Address: /orders/enrich
Consumer iFlow <- ProcessDirect sender Address: /orders/enrichदोनों iFlows एक ही tenant पर चलते हैं, और producer के call कर पाने से पहले consumer का deploy होना ज़रूरी है। किसी address पर केवल एक deploy किया गया consumer सुन सकता है। Request-Reply step के साथ इस्तेमाल करने पर consumer का अंतिम message producer को response के रूप में वापस जाता है।
ProcessDirect से क्या पार होता है और क्या नहीं
Consumer को message body और message headers मिलते हैं। Exchange properties पीछे रह जाती हैं: consumer producer की किसी भी property के बिना एक नया exchange शुरू करता है।
Property भेजने के लिए, call से ठीक पहले Content Modifier से उसे header में copy करें, जैसे source type Property और value orderId वाला header orderId। Consumer में, अगर आप वहाँ properties के साथ काम करना पसंद करते हैं, तो उसे फिर से property में copy करें। जो headers consumer को नहीं मिलने चाहिए, खासकर बड़े headers, उन्हें हटा दें।
JMS: queue के ज़रिए message भेजना
JMS में producer का JMS receiver adapter message को queue में लिखता है, और उसी Queue Name पर JMS sender adapter वाला consumer iFlow उसे पढ़ता है। दोनों iFlows एक-दूसरे से अलग (decoupled) रहते हैं: producer इंतज़ार नहीं करता, और consumer fail होने वाले messages को फिर से try करता है।
- Headers message के साथ सहेजे जाते हैं और consumer तक पहुँचते हैं।
- Exchange properties तब तक नहीं सहेजी जातीं जब तक JMS receiver पर Transfer Exchange Properties चालू न हो।
- Message के साथ सहेजी जाने वाली हर चीज़ की size सीमा होती है, इसलिए headers और transfer की गई properties छोटी रखें।
- Consumer में
SAPJMSRetriesheader बताता है कि message कितनी बार retry हुआ है।
आमने-सामने तुलना
| ProcessDirect | JMS | |
|---|---|---|
| iFlows के बीच link | दोनों में एक ही Address | दोनों में एक ही Queue Name |
| Call | सीधी, response लौटा सकती है | Asynchronous, queue के ज़रिए |
| Message body | पहुँचती है | पहुँचती है |
| Headers | पहुँचते हैं | पहुँचते हैं |
| Exchange properties | नहीं पहुँचतीं: headers में copy करें | केवल Transfer Exchange Properties के साथ पहुँचती हैं |
दोनों तरफ़ header के नाम case-insensitive हैं, पर exchange property के नाम case-sensitive हैं, इसलिए consumer में वापस बनाई गई property की spelling ठीक वैसी ही होनी चाहिए जैसी आगे के steps उसे पढ़ते हैं।
जब कोई value नहीं पहुँचती
- Addresses या queue names को अक्षर दर अक्षर मिलाएँ, जिसमें शुरुआती slash और case भी शामिल हैं।
- जाँचें कि consumer deploy और start हो चुका है।
- जाँचें कि value कहीं property तो नहीं थी: ProcessDirect से वह कभी नहीं पहुँचती; JMS से केवल Transfer Exchange Properties के साथ।
- जाँचें कि producer से बाहर जाते समय कोई Content Modifier header को हटा तो नहीं रहा।
- दोनों iFlows को Trace log level के साथ चलाएँ और producer के आखिरी step के headers की तुलना consumer के पहले step के headers से करें।
अज्ञात headers और properties वाला लेख सामान्य जाँचें समझाता है, और SAP CPI में Camel Simple expressions values पढ़ने का syntax।
Kitegra कैसे मदद करता है
Kitegra browser एक्सटेंशन iFlows के बीच ProcessDirect और JMS links को follow करता है। Consumer में ${ या $ लिखने पर यह जुड़े हुए iFlows में सेट किए गए headers सुझाता है, साथ ही उनके साझा link names भी, इसलिए किसी spelling को जाँचने के लिए आपको producer खोलने की ज़रूरत नहीं पड़ती।
इसका navigator हर SAP खाते के लिए आपके tenants, packages और iFlows दिखाता है, ताकि आप link के एक सिरे से दूसरे सिरे पर जा सकें। एक्सटेंशन किसी iFlow का content कभी सहेजता, deploy या edit नहीं करता, और आपका tenant सिर्फ़ तब बदलता है जब आप चार नामित actions में से किसी एक पर क्लिक करते हैं, जिन्हें बंद भी किया जा सकता है।
किसी message को producer से consumer तक follow करने के लिए उसे उसकी Correlation ID से खोजें: timeline हर वह iFlow दिखाती है जिससे वह गुज़रा।
Kitegra खाते के बिना यह हर मॉड्यूल में 5 iFlows पर काम करता है। Free प्लान में 50, Starter में 100 और Pro में 300 iFlows शामिल हैं; Business में कोई सीमा नहीं। प्लान की तुलना करें।
अपने अगले iFlow में आज़माएँ
पढ़ें कि Kitegra, SAP Integration Suite के डिज़ाइनर में क्या करता है, या इसे Kitegra के बाकी Chrome एक्सटेंशन के साथ देखें।
अक्सर पूछे जाने वाले प्रश्न
क्या SAP CPI में headers ProcessDirect से पार होते हैं?
हाँ। Consumer iFlow को message body और headers मिलते हैं। Exchange properties नहीं पहुँचतीं।
ProcessDirect से दूसरे iFlow को exchange property कैसे भेजूँ?
ProcessDirect call से पहले Content Modifier से उसे header में copy करें, और अगर consumer में उसकी ज़रूरत है तो वहाँ फिर से property में copy करें।
मेरी ProcessDirect call जुड़ती क्यों नहीं?
Addresses अलग हैं, चाहे एक अक्षर या slash का ही अंतर हो, या consumer iFlow उसी tenant पर deploy नहीं है।
क्या JMS exchange properties रखता है?
केवल तब, जब JMS receiver adapter पर Transfer Exchange Properties चालू हो। Headers हमेशा message के साथ सहेजे जाते हैं।
JMS message कितनी बार retry हुआ, यह कैसे जानूँ?
Consumer iFlow में SAPJMSRetries header पढ़ें, जैसे तय संख्या में प्रयासों के बाद retry रोकने के लिए।
क्या दो iFlows एक ही ProcessDirect address पर सुन सकते हैं?
नहीं। किसी address को केवल एक deploy किया गया consumer इस्तेमाल कर सकता है; हर consumer को उसका अपना address दें।