Помилка виклику слухача повідомлень JMS, причина: Ідентифікатор містить недійсний символ ідентифікатора JMS '-': 'x-request-id'


9

Я вперше працюю з JMS та чергами (черги Azure). Мені потрібно зробити чергу, де сервер Rubi запише деякі дані, а Java прочитає їх з черги і зробить подальше виконання. Цей процес добре працює на моїй машині. Я створив кінцеву точку REST, яка записує дані у чергу, і як тільки дані записуються у чергу, слухач переймає та читає дані та виконує. Коли ми розгортаємо його на Azure, помилка, яку я бачу в журналах, яка не дозволяє запускати черги, є

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

Зіпкін також присутній на сервері 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?
Джастін Бертрам

Де реальна помилка у "детальному повідомленні про помилку", яке ви вставили? Це просто схоже на деякий журнал налагодження.
Джастін Бертрам

Whee - код?
користувач207421

Відповіді:


1

З повідомлення про помилку очевидно, що ви використовуєте клієнт qpid JMS для спілкування через черги. qpid-клієнт не дозволить жодних ключів, які порушують умови іменування змінної Java, наприклад, ви не зможете відправити x-request-id у заголовок черги, який клієнт qpid jms споживає, оскільки це призведе до помилки. Вам потрібно подбати про istio / zipkin, щоб не додавати певні заголовки (ідентично вам вони фактично не потрібні) з чергою, коли її намагаються спілкуватися в лазурній шині. Отже, ви повинні відключити бібліотеки istio / zipkin для перехоплення запиту черг, щоб запит до черги / з нього можна було зробити без заголовків. Це виправить проблему.


4

У розділі 3.5.1 специфікації JMS 2 зазначено про властивості повідомлення:

Імена властивостей повинні відповідати правилам ідентифікатора вибору повідомлення. Див. Розділ 3.8 «Вибір повідомлення» для отримання додаткової інформації.

Що стосується ідентифікаторів, розділ 3.8.1.1, зокрема, говорить:

Ідентифікатор - символьна послідовність необмеженої довжини, яка повинна починатися з символу запуску ідентифікатора Java; всі наступні символи повинні бути символами частини ідентифікатора Java. Символом початку ідентифікатора є будь-який символ, для якого метод Character.isJavaIdentifierStartповертається true. Сюди входять «_» та «$». Символом частини ідентифікатора є будь-який символ, для якого метод Character.isJavaIdentifierPartповертається true.

Якщо ви передаєте символ -в один Character.isJavaIdentifierStartабо Character.isJavaIdentifierPartповертається значення false. Іншими словами, символ в імені функції обміну повідомленнями порушує специфікацію JMS і , отже , призведе до помилки.-


0

Деталі помилки (слід стека Java) тут були б дуже корисні.

В повідомленні про помилку я припускаю, що ви використовуєте клієнт qpid JMS , який здійснює перевірку імен властивостей повідомлення. Ці імена можуть містити лише символи, які є дійсними символами ідентифікатора Java .

У рядку 'ім'я черги' є символ '-', тобто не ідентифікатор Java. Щоб виправити, вам потрібно змінити "ім'я черги" на щось з дійсними символами, наприклад, "ім'я_порядки" (з підкресленням) або "черга імені" (випадок верблюда).


1
Я оновив запитання детальним повідомленням про помилку. Ми можемо бачити значення в заголовку (тобто x-request-id) створює проблему. його отримання додається через istio. Але якимось чином JMS не в змозі їх розібрати.
Омар Бахір
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.