Invoker pendengar pesan JMS gagal, Penyebab: Identifier berisi karakter pengidentifikasi JMS tidak valid '-': 'x-request-id'

9

Saya bekerja dengan JMS dan antrian (antrian Azure) untuk pertama kalinya. Saya diharuskan membuat antrian di mana server Rubi akan menulis beberapa data dan Java akan membacanya dari antrian dan akan melakukan eksekusi lebih lanjut. Proses ini bekerja dengan baik secara lokal di mesin saya. Saya telah membuat titik akhir REST yang menulis data dalam antrian dan begitu data ditulis dalam antrian, pendengar akan mengambil alih dan membaca data dan mengeksekusi. Ketika kami menyebarkannya ke Azure kesalahan yang bisa saya lihat di log yang tidak membiarkan Antrian mulai adalah

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

Zipkin juga hadir di server Azure sebagai sistem penelusuran terdistribusi dan saya kira ini x-request-idterkait dengan Zipkin yang menciptakan masalah. Saya telah mencari Google untuk masalah ini tetapi tidak dapat memahami mengapa hal itu terjadi.

Berikut ini adalah pesan kesalahan terperinci:

[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
Omar Bahir
sumber
Apa itu "Rubi server" dan bagaimana cara menulis data ke antrian yang Anda coba gunakan dari klien JMS Anda?
Justin Bertram
Di mana kesalahan aktual dalam "pesan kesalahan terperinci" yang Anda tempelkan? Itu hanya tampak seperti beberapa penebangan debug.
Justin Bertram
Whee kodenya?
user207421

Jawaban:

1

Dari pesan kesalahan jelas bahwa Anda menggunakan klien JMS qpid untuk komunikasi melalui antrian. klien qpid tidak akan mengizinkan kunci apa pun yang melanggar konvensi penamaan variabel java mis. Anda tidak akan dapat mengirim x-request-id di header antrian yang dikonsumsi qpid jms client karena akan menimbulkan kesalahan. Anda perlu menjaga istio / zipkin agar tidak menambahkan header tertentu (id Anda sebenarnya tidak membutuhkannya) dengan antrian ketika mencoba berkomunikasi di bus biru. Jadi, Anda harus menonaktifkan pustaka istio / zipkin untuk mencegat permintaan antrian sehingga permintaan ke / dari antrian dapat dilakukan tanpa header. Ini akan memperbaiki masalah.

pengguna11377504
sumber
4

Bagian 3.5.1 dari spesifikasi JMS 2 menyatakan ini tentang properti pesan:

Nama properti harus mematuhi aturan pengidentifikasi pemilih pesan. Lihat Bagian 3.8 “Pemilihan pesan” untuk informasi lebih lanjut.

Dalam hal pengidentifikasi, bagian 3.8.1.1 menyatakan, sebagian:

Identifier adalah urutan karakter panjang tak terbatas yang harus dimulai dengan karakter awal pengidentifikasi Java; semua karakter berikut harus karakter karakter pengenal Java. Karakter awal pengidentifikasi adalah karakter apa pun yang Character.isJavaIdentifierStartmengembalikan metode true. Ini termasuk '_' dan '$'. Karakter bagian pengidentifikasi adalah karakter apa pun yang Character.isJavaIdentifierPartmengembalikan metode true.

Jika Anda memasukkan karakter -ke salah satu Character.isJavaIdentifierStartatau Character.isJavaIdentifierPartnilai kembalinya adalah false. Dengan kata lain, para -karakter dalam nama properti pesan melanggar JMS spesifikasi dan karena itu akan menyebabkan kesalahan.

Justin Bertram
sumber
0

Detail kesalahan (jejak tumpukan Java) akan sangat berguna di sini.

Menurut pesan kesalahan saya berasumsi, Anda menggunakan qpid JMS client , yang melakukan pemeriksaan nama properti pesan. Nama-nama ini hanya dapat berisi karakter, yang merupakan karakter pengidentifikasi Java yang valid .

Dalam string 'antrian-nama' ada karakter '-', itu bukan pengenal Java. Untuk memperbaikinya, Anda perlu mengubah 'nama-antrian' menjadi sesuatu dengan karakter yang valid, misalnya 'antrian nama' (dengan garis bawah), atau 'antrian Nama' (kasing camel).

Apakah begitu
sumber
1
Saya telah memperbarui pertanyaan dengan pesan kesalahan terperinci. Kita bisa melihat nilai-nilai di header (yaitu x-request-id) yang membuat masalah. itu ditambahkan melalui istio. Tapi entah bagaimana JMS tidak bisa menguraikan ini.
Omar Bahir