JMS संदेश श्रोता का चालान विफल हुआ, कारण: पहचानकर्ता में अमान्य JMS पहचानकर्ता वर्ण शामिल है '-': 'x-request-id'


9

मैं पहली बार JMS और कतारों (Azure queues) के साथ काम कर रहा हूं। मुझे एक कतार बनाने की आवश्यकता है जहां रूबी सर्वर कुछ डेटा लिखेगा और जावा इसे कतार से पढ़ेगा और आगे निष्पादन करेगा। यह प्रक्रिया मेरी मशीन पर स्थानीय रूप से ठीक काम कर रही है। मैंने एक REST एंडपॉइंट बनाया है जो कतार में डेटा लिख ​​रहा है और एक बार कतार में डेटा लिखने के बाद, श्रोता डेटा को ले जाएगा और डेटा को पढ़ेगा और निष्पादित करेगा। जब हम इसे अज़ूर करने के लिए तैनात करते हैं तो त्रुटि मैं उन लॉग में देख सकता हूं जो कतारों को शुरू नहीं होने दे रहा है

Setup of JMS message listener invoker failed for destination 'queue' - trying to recover. Cause: Identifier contains invalid JMS identifier character '-': 'x-request-id' 

जिप्किन भी एज़्योर सर्वर पर एक वितरित ट्रेसिंग प्रणाली के रूप में मौजूद है और मुझे लगता है कि यह x-request-idजिपकिन से संबंधित है जो समस्या पैदा कर रहा है। मैंने इस मुद्दे के लिए Google को खोजा है लेकिन समझ नहीं पाया कि ऐसा क्यों हो रहा है।

निम्नलिखित त्रुटि संदेश है:

[36mc.m.s.l.NextGenRequestLoggingFilter     [0;39m [2m:[0;39m 
Before request [uri=/services/deal-service/api/v2/deals/ack;headers= 
[x-request-id:"2d8d86d7-4fbf-9db6-8e95-28813f21a85c", 
x-envoy-internal:"true", x-b3-parentspanid:"a209cdc649b0b890", content- 
length:"575", x-forwarded-proto:"http", postman-token:"ad074595- 
76a5-474b-9711-7e071b12b3b0", x-b3-sampled:"1", x-forwarded- 
for:"10.244.2.1", accept:"*/*", 
authorization: "some-token-YJc4tg--34jPRziJNSACqNQ", x-b3- 
traceid:"6b40ff22781be67ba209cdc649b0b890", x-b3- 
spanid:"702684ddb62cfe6b", 
host:"portal-gateway.52.228.65.225.nip.io", 
cache-control:"no-cache", accept-encoding:"gzip, deflate, br", 
user-agent:"PostmanRuntime/7.22.0", 
Content-Type:"application/xml;charset=UTF-8"]]
2020-02-18T15:19:34.197666458Z [2m2020-02-18 15:19:34.197[0;39m  . 
[32mDEBUG 
[,6b40ff22781be67ba209cdc649b0b890,702684ddb62cfe6b,true][0;39m  . 
[35m9[0;39m [2m---[0;39m [2m[ XNIO-1 task-15][0;39m

"रूबी सर्वर" क्या है और यह उस कतार के डेटा को कैसे लिख रहा है जिसे आप अपने जेएमएस क्लाइंट से उपयोग करने का प्रयास कर रहे हैं?
जस्टिन बर्ट्रम

"विस्तृत त्रुटि संदेश" में वास्तविक त्रुटि कहां है जिसे आपने चिपकाया है? यह सिर्फ कुछ डिबग लॉगिंग जैसा दिखता है।
जस्टिन बर्ट्रम

मट्ठा कोड है?
user207421

जवाबों:


1

त्रुटि संदेश से यह स्पष्ट है कि आप qpid JMS क्लाइंट का उपयोग कतारों के माध्यम से संचार के लिए कर रहे हैं। qpid क्लाइंट किसी भी कुंजी को अनुमति नहीं देगा जो कि java वैरिएबल नेमिंग कन्वेंशन का उल्लंघन करती है। उदाहरण के लिए, आप कतार के शीर्षलेख में x-request-id नहीं भेज पाएंगे जिसे qpid jms क्लाइंट उपभोग कर रहा है क्योंकि यह त्रुटि फेंक देगा। जब आप एज़्योर बस पर संवाद करने की कोशिश कर रहे हों, तो कतार के साथ कुछ हेडर (वास्तव में आपको उनकी आवश्यकता नहीं है) जोड़ने के लिए आपको इस्तिओ / जिपकिन का ध्यान रखना होगा। इसलिए आपको कतारों के लिए अनुरोध को रोकने के लिए istio / zipkin पुस्तकालयों को निष्क्रिय करना होगा ताकि कतार से / के लिए अनुरोध हेडर के बिना किया जा सके। इससे समस्या ठीक हो जाएगी।


4

JMS 2 विनिर्देश की धारा 3.5.1 संदेश गुणों के बारे में बताती है:

संपत्ति के नाम एक संदेश चयनकर्ता पहचानकर्ता के लिए नियमों का पालन करना चाहिए। अधिक जानकारी के लिए धारा 3.8 “संदेश चयन” देखें।

पहचानकर्ताओं के संबंध में, धारा 3.8.1.1 राज्यों, भाग में:

एक पहचानकर्ता एक असीमित-लंबाई चरित्र अनुक्रम है जो कि जावा पहचानकर्ता प्रारंभ चरित्र के साथ शुरू होना चाहिए; सभी निम्नलिखित वर्ण जावा पहचानकर्ता भाग वर्ण होने चाहिए। एक पहचानकर्ता प्रारंभ चरित्र कोई भी चरित्र है जिसके लिए विधि Character.isJavaIdentifierStartवापस आती है true। इसमें '_' और '$' शामिल हैं। एक पहचानकर्ता भाग चरित्र कोई भी चरित्र है जिसके लिए विधि Character.isJavaIdentifierPartवापस आती है true

यदि आप पात्र -को या तो पास करते हैं Character.isJavaIdentifierStartया Character.isJavaIdentifierPartरिटर्न वैल्यू है false। दूसरे शब्दों में, संदेश संपत्ति के नाम पर चरित्र JMS विनिर्देश का उल्लंघन करती है और इसलिए एक त्रुटि का कारण होगा।-


0

त्रुटि का विवरण (जावा स्टैक ट्रेस) यहां वास्तव में उपयोगी होगा।

त्रुटि संदेश द्वारा मुझे लगता है, आप qpid JMS क्लाइंट का उपयोग कर रहे हैं , जो संदेश गुणों के नामों की जाँच कर रहा है। इन नामों में केवल वर्ण हो सकते हैं, जो मान्य जावा पहचानकर्ता वर्ण हैं

स्ट्रिंग 'कतार-नाम' में एक '-' वर्ण है, जो जावा पहचानकर्ता नहीं है। ठीक करने के लिए, आपको 'कतार-नाम' को मान्य वर्णों के साथ कुछ में बदलना होगा, उदाहरण के लिए 'कतार_नाम' (अंडरस्कोर), या 'कतार नाम' (ऊंट मामले)।


1
मैंने विस्तृत त्रुटि संदेश के साथ सवाल अपडेट किया है। हम हेडर में मान देख सकते हैं (यानी x-request-id) मुद्दा बना रहा है। इसके istio के माध्यम से जोड़ा जा रहा है। लेकिन किसी तरह जेएमएस इनको पार्स नहीं कर पा रहा है।
उमर बहिर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.