এই নিবন্ধের মডিউল: Integration Flow Helper
SAP CPI-তে ProcessDirect ও JMS: iFlows-এর মধ্যে headers কীভাবে পাঠাবেন
SAP CPI-তে ProcessDirect ও JMS দিয়ে iFlows-এর মধ্যে headers ও exchange properties কীভাবে পাঠাবেন: মিলে যাওয়া addresses ও queues, কী পার হয়, এবং কীভাবে debug করবেন।

SAP CPI-এর বড় integrations কয়েকটি iFlow-এ ভাগ করা থাকে: একটি receive করে, অন্যগুলো enrich, map বা send করে। ProcessDirect একই tenant-এর অন্য একটি iFlow-কে সরাসরি call করে; JMS একটি message queue-তে রাখে যা অন্য একটি iFlow পরে পড়ে। দুই ক্ষেত্রেই প্রশ্ন একটাই: আমার কোন headers ও properties অন্য প্রান্তে পৌঁছায়?
এই নিবন্ধে ব্যাখ্যা করা হয়েছে দুটি connection কীভাবে সেট করা হয়, কী পার হয় আর কী হয় না, এবং দুটি iFlow-এর মধ্যে একটি value কেন হারিয়ে গেল তা কীভাবে খুঁজে বের করবেন।
ProcessDirect: একটি iFlow অন্যটিকে call করে
যে iFlow call করে, অর্থাৎ producer, একটি ProcessDirect receiver adapter ব্যবহার করে। যাকে call করা হয়, অর্থাৎ consumer, সেটি শুরু হয় একটি ProcessDirect sender adapter দিয়ে। দুটিরই একটি Address field আছে, এবং call তখনই যুক্ত হয় যখন address দুই দিকে হুবহু এক, যেমন:
Producer iFlow -> ProcessDirect receiver Address: /orders/enrich
Consumer iFlow <- ProcessDirect sender Address: /orders/enrichদুটি iFlow একই 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-এর পাওয়া উচিত নয়, বিশেষত বড়গুলো, সেগুলো মুছে দিন।
JMS: queue দিয়ে message পাঠানো
JMS-এ producer-এর JMS receiver adapter message-টি একটি queue-তে লেখে, আর একই Queue Name-এ JMS sender adapter-সহ একটি consumer iFlow সেটি পড়ে। দুটি iFlow পরস্পর থেকে বিচ্ছিন্ন (decoupled) থাকে: producer অপেক্ষা করে না, আর consumer fail করা messages আবার চেষ্টা করে।
- 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-এর বানান হুবহু তেমনই হতে হবে যেভাবে পরের steps সেটি পড়ে।
যখন একটি value পৌঁছায় না
- Addresses বা queue names অক্ষর ধরে ধরে মিলিয়ে দেখুন, শুরুর slash ও case-সহ।
- দেখুন consumer deploy ও start করা আছে কিনা।
- দেখুন value-টি property ছিল কিনা: ProcessDirect দিয়ে তা কখনো পৌঁছায় না; JMS দিয়ে শুধু Transfer Exchange Properties-সহ।
- দেখুন producer থেকে বের হওয়ার পথে কোনো Content Modifier header-টি মুছে দিচ্ছে কিনা।
- দুটি iFlow 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 অনুসরণ করে। Consumer-এ ${ বা $ লিখলে এটি যুক্ত iFlows-এ সেট করা headers সাজেস্ট করে, সঙ্গে তাদের শেয়ার করা link names-ও, তাই কোনো বানান যাচাই করতে আপনাকে producer খুলতে হয় না।
এর navigator প্রতিটি SAP অ্যাকাউন্টের জন্য আপনার tenants, packages ও iFlows দেখায়, তাই আপনি link-এর এক প্রান্ত থেকে অন্য প্রান্তে যেতে পারেন। এক্সটেনশনটি কখনো কোনো iFlow-এর content সংরক্ষণ, deploy বা edit করে না, এবং আপনার tenant কেবল তখনই বদলায় যখন আপনি নাম দেওয়া চারটি action-এর একটিতে ক্লিক করেন, যেগুলো বন্ধও করা যায়।
একটি message producer থেকে consumer পর্যন্ত অনুসরণ করতে তার Correlation ID দিয়ে সেটি খুঁজুন: timeline সেই সব iFlow দেখায় যেগুলোর মধ্য দিয়ে এটি গেছে।
Kitegra অ্যাকাউন্ট ছাড়া এটি প্রতিটি মডিউলে 5টি iFlow-এ কাজ করে। Free প্ল্যানে 50, Starter-এ 100 এবং Pro-তে 300টি iFlow অন্তর্ভুক্ত; Business-এ কোনো সীমা নেই। প্ল্যানগুলো তুলনা করুন।
আপনার পরবর্তী iFlow-এ চেষ্টা করুন
SAP Integration Suite ডিজাইনারে Kitegra কী করে তা পড়ুন, অথবা 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 বন্ধ করতে।
দুটি iFlow কি একই ProcessDirect address-এ শুনতে পারে?
না। একটি address শুধু একটি deploy করা consumer ব্যবহার করতে পারে; প্রতিটি consumer-কে নিজস্ব address দিন।