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-id
terkait 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
Jawaban:
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.
sumber
Bagian 3.5.1 dari spesifikasi JMS 2 menyatakan ini tentang properti pesan:
Dalam hal pengidentifikasi, bagian 3.8.1.1 menyatakan, sebagian:
Jika Anda memasukkan karakter
-
ke salah satuCharacter.isJavaIdentifierStart
atauCharacter.isJavaIdentifierPart
nilai kembalinya adalahfalse
. Dengan kata lain, para-
karakter dalam nama properti pesan melanggar JMS spesifikasi dan karena itu akan menyebabkan kesalahan.sumber
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).
sumber