ผู้เรียกฟังข้อความ JMS ล้มเหลวสาเหตุ: ตัวระบุมีอักขระตัวระบุ JMS ที่ไม่ถูกต้อง '-': 'x-request-id'


9

ฉันทำงานกับ JMS และคิว (Azure queues) เป็นครั้งแรก ฉันต้องสร้างคิวที่เซิร์ฟเวอร์ Rubi จะเขียนข้อมูลบางส่วนและ Java จะอ่านจากคิวและจะดำเนินการต่อไป กระบวนการนี้ทำงานได้ดีบนเครื่องของฉัน ฉันได้สร้าง REST endpoint ซึ่งกำลังเขียนข้อมูลในคิวและเมื่อข้อมูลถูกเขียนในคิวผู้ฟังจะเข้ามาและอ่านข้อมูลและดำเนินการ เมื่อเราปรับใช้กับ Azure ข้อผิดพลาดที่ฉันเห็นในบันทึกซึ่งไม่อนุญาตให้เริ่มคิวคือ

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

Zipkin มีอยู่ในเซิร์ฟเวอร์ Azure เป็นระบบติดตามแบบกระจายและฉันเดาว่านี่x-request-idเกี่ยวข้องกับ Zipkin ซึ่งกำลังสร้างปัญหา ฉันค้นหาปัญหาแล้ว แต่ไม่เข้าใจว่าทำไม 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

"เซิร์ฟเวอร์ Rubi" คืออะไรและเขียนข้อมูลไปยังคิวที่คุณพยายามใช้จากไคลเอนต์ JMS ของคุณอย่างไร
Justin Bertram

ข้อผิดพลาดจริงใน "ข้อความแสดงข้อผิดพลาดโดยละเอียด" ซึ่งคุณวางไว้อยู่ที่ไหน ดูเหมือนว่าจะมีการบันทึกข้อบกพร่องบางอย่าง
Justin Bertram

เป็นรหัสอะไร
user207421

คำตอบ:


1

จากข้อความแสดงข้อผิดพลาดมันชัดเจนว่าคุณใช้ไคลเอนต์ qpid JMS สำหรับการสื่อสารผ่านคิว ลูกค้า qpid จะไม่อนุญาตให้ใช้คีย์ใด ๆ ที่ละเมิดหลักการตั้งชื่อตัวแปร Java เช่นคุณจะไม่สามารถส่ง x-request-id ในส่วนหัวของคิวซึ่งไคลเอ็นต์ qpid jms ใช้งานเนื่องจากจะเกิดข้อผิดพลาด คุณต้องดูแล istio / zipkin เพื่อไม่ให้เพิ่มส่วนหัวบางอย่าง (id ที่คุณไม่ต้องการใช้จริง) พร้อมกับคิวเมื่อมันพยายามสื่อสารบนรถบัสสีฟ้า ดังนั้นคุณต้องปิดการใช้งานไลบรารี istio / zipkin เพื่อสกัดกั้นการร้องขอคิวเพื่อให้สามารถทำการร้องขอไปยัง / จากคิวโดยไม่มีส่วนหัว สิ่งนี้จะแก้ไขปัญหา


4

ส่วน 3.5.1 ของข้อกำหนดคุณสมบัติ JMS 2 ระบุสิ่งนี้เกี่ยวกับคุณสมบัติข้อความ:

ชื่อคุณสมบัติต้องเป็นไปตามกฎสำหรับตัวระบุตัวเลือกข้อความ ดูหัวข้อ 3.8“ การเลือกข้อความ” สำหรับข้อมูลเพิ่มเติม

ในส่วนที่เกี่ยวกับตัวระบุส่วน 3.8.1.1 ระบุไว้บางส่วน:

ตัวระบุเป็นลำดับอักขระที่มีความยาวไม่ จำกัด ซึ่งต้องขึ้นต้นด้วยอักขระเริ่มต้นของตัวระบุ Java อักขระต่อไปนี้ทั้งหมดต้องเป็นอักขระส่วนของตัวระบุ Java ตัวละครเริ่มต้นที่ระบุเป็นตัวอักษรใด ๆ ซึ่งวิธีการที่ผลตอบแทนCharacter.isJavaIdentifierStart trueซึ่งรวมถึง '_' และ '$' ตัวละครตัวระบุส่วนที่เป็นตัวละครใด ๆ ที่วิธีการที่ ผลตอบแทนCharacter.isJavaIdentifierParttrue

ถ้าคุณผ่านตัวละคร-เข้ามาอย่างใดอย่างหนึ่งCharacter.isJavaIdentifierStartหรือค่าตอบแทนเป็นCharacter.isJavaIdentifierPart falseในคำอื่น ๆตัวละครในชื่อของคุณสมบัติข้อความฝ่าฝืนข้อกำหนด JMSและดังนั้นจึงจะทำให้เกิดข้อผิดพลาด-


0

รายละเอียดข้อผิดพลาด (การติดตามสแต็กของ Java) จะมีประโยชน์จริง ๆ ที่นี่

โดยข้อความแสดงข้อผิดพลาดฉันถือว่าคุณกำลังใช้ไคลเอ็นต์ qpid JMSที่กำลังตรวจสอบชื่อคุณสมบัติข้อความ ชื่อเหล่านี้สามารถมีอักขระเท่านั้นที่ถูกต้องJava ตัวอักษรระบุ

ในสตริง 'queue-name' มีอักขระ '-' ซึ่งไม่ใช่ตัวระบุ Java ในการแก้ไขคุณต้องเปลี่ยน 'queue-name' เป็นสิ่งที่มีอักขระที่ถูกต้องตัวอย่างเช่น 'que_name' (ที่มีเครื่องหมายขีดล่าง) หรือ 'queName' (กรณี camel)


1
ฉันได้อัปเดตคำถามพร้อมข้อความแสดงข้อผิดพลาดโดยละเอียดแล้ว เราสามารถเห็นค่าในส่วนหัว (เช่น x-request-id) กำลังสร้างปัญหา มันได้รับการเพิ่มผ่าน istio แต่อย่างใด JMS ไม่สามารถแยกวิเคราะห์สิ่งเหล่านี้ได้
Omar Bahir
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.