अपाचे कैमल डिफ़ॉल्ट रूप से एक संदेश में मौजूद सभी शीर्षलेखों को HTTP शीर्षलेखों में अनुवादित करता है। यह बहुत उपयोगी है, लेकिन चूंकि कई घटक आंतरिक स्थिति के लिए हेडर का भी उपयोग करते हैं, बाहरी HTTP कॉल पर आंतरिक जानकारी का रिसाव हो सकता है। उदाहरण, यदि कार्य टाइमर / क्रॉन का उपयोग करके शुरू किया गया था, तो हम तार पर निम्नलिखित HTTP शीर्षलेख भेजते हैं:

http-outgoing-1 >> fireTime: Mon Dec 28 10:14:00 CET 2020 
http-outgoing-1 >> jobDetail: JobDetail 'Camel_camel-1.sync':  jobClass: 'org.apache.camel.component.quartz.CamelJob concurrentExectionDisallowed: false persistJobDataAfterExecution: false isDurable: false requestsRecovers: false 
http-outgoing-1 >> jobInstance: org.apache.camel.component.quartz.CamelJob@4ff90d52 
http-outgoing-1 >> jobRunTime: -1 
http-outgoing-1 >> mergedJobDataMap: org.quartz.JobDataMap@2338bfe0 
http-outgoing-1 >> nextFireTime: Mon Dec 28 10:15:00 CET 2020 
http-outgoing-1 >> refireCount: 0 
http-outgoing-1 >> scheduledFireTime: Mon Dec 28 10:14:00 CET 2020 
http-outgoing-1 >> scheduler: org.quartz.impl.StdScheduler@17a5f565 
http-outgoing-1 >> trigger: Trigger 'Camel_camel-1.syncJob':  triggerClass: 'org.quartz.impl.triggers.CronTriggerImpl calendar: 'null' misfireInstruction: 1 nextFireTime: Mon Dec 28 10:15:00 CET 2020 
http-outgoing-1 >> triggerGroup: Camel_camel-1 
http-outgoing-1 >> triggerName: syncJob 
... (actual needed HTTP headers:)
http-outgoing-1 >> Connection: Keep-Alive 
http-outgoing-1 >> User-Agent: Apache-HttpClient/4.5.12 (Java/11.0.6) 

मुझे पता है कि HTTP कॉल का प्रयास करने से पहले मैं सभी शीर्षलेखों को हटा सकता हूं। चूंकि मेरे अन्य मार्ग भी मेरे आंतरिक शीर्षलेख जोड़ते हैं जिनकी मुझे आवश्यकता है, कॉल भेजने से पहले बिंदु पर मेरे लिए सभी "जंक" शीर्षलेखों को हटाना आसान नहीं है, लेकिन मेरे आंतरिक लोगों को रखना (जो HTTP कॉल बीटीडब्ल्यू में भी समाप्त होता है। )

मुझे पता है कि मैं इसके लिए संपत्तियों का उपयोग कर सकता हूं। मुझे पता है कि मैं संदेश के शीर्षलेखों को स्वचालित रूप से HTTP शीर्षलेख के रूप में जोड़ने के लिए अक्षम कर सकता हूं। इस मामले में मुझे यकीन नहीं है कि मुझे मैन्युअल रूप से शीर्षलेख जोड़ने की ज़रूरत है जो HTTP (जैसे उपयोगकर्ता-एजेंट) के लिए आवश्यक हैं।

हेडर का अन्य लगातार दुरुपयोग यह है कि यदि आप 2 HTTP कॉल करते हैं और हेडर को साफ़ करना भूल जाते हैं, तो पहली कॉल के आउटपुट हेडर पहले के इनपुट हेडर बन जाएंगे।

किसी को भी इस मुद्दे से बचने के लिए एक अच्छा कामकाज मिला है?

1
peceps 28 पद 2020, 12:40

1 उत्तर

सबसे बढ़िया उत्तर

इस प्रकार HTTP-आधारित समापन बिंदु (ऊंट-http, ऊंट-http4, ऊंट-जेट्टी, ऊंट-रेस्टलेट, ऊंट-सीएक्सएफ, ऊंट-सीएक्सएफआर) डिफ़ॉल्ट रूप से प्रक्रिया शीर्षलेख हैं (आप HeaderFilterStrategy का उपयोग करके इस व्यवहार को अनुकूलित कर सकते हैं)।

  • उपभोक्ता: CamelHttp* शीर्षलेख के साथ एक संदेश में बनाता है जो आने वाले संदेश की स्थिति, मूल संदेश से सभी HTTP शीर्षलेख, और यूआरएल विकल्प (केवल जेटी) रिकॉर्ड करता है।

  • निर्माता: HTTP प्रोड्यूसर एंडपॉइंट के व्यवहार को नियंत्रित करने के लिए एक्सचेंज को लक्ष्य संदेश प्रारूप में CamelHttp* हेडर के साथ परिवर्तित करता है, Camel* हेडर को फ़िल्टर कर दिया जाता है क्योंकि वे आंतरिक के लिए अभिप्रेत हैं उपयोग, और अन्य सभी शीर्षलेख content-length, content-type, cache-control, connection, date, pragma, trailer, transfer-encoding, upgrade, via, warning के अपवाद के साथ HTTP शीर्षलेख में परिवर्तित हो जाते हैं।

कॉल भेजने से पहले मेरे लिए सभी "जंक" हेडर को हटाना आसान नहीं है, लेकिन मेरे आंतरिक लोगों को रखना (जो HTTP कॉल बीटीडब्ल्यू में भी समाप्त होता है।)

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

इस मामले में मुझे यकीन नहीं है कि मुझे मैन्युअल रूप से शीर्षलेख जोड़ने की ज़रूरत है जो HTTP (जैसे उपयोगकर्ता-एजेंट) के लिए आवश्यक हैं।

आपको उनकी आवश्यकता नहीं है।

हेडर का अन्य लगातार दुरुपयोग यह है कि यदि आप 2 HTTP कॉल करते हैं और हेडर को साफ़ करना भूल जाते हैं, तो पहली कॉल के आउटपुट हेडर पहले के इनपुट हेडर बन जाएंगे।

इस मामले में, आपको कम से कम .removeHeaders("CamelHttp*) वाले कंट्रोल हेडर को हटा देना चाहिए।

3
fvaleri 28 पद 2020, 13:57