JMS ileti dinleyicisi davetiyesi başarısız oldu, Neden: Tanımlayıcı geçersiz JMS tanımlayıcı karakteri içeriyor '-': 'x-request-id'


9

JMS ve kuyruklar (Azure kuyrukları) ile ilk kez çalışıyorum. Rubi sunucusunun bazı verileri yazacağı ve Java'nın kuyruktan okuyacağı ve daha fazla yürütme yapacağı bir kuyruk oluşturmam gerekiyor. Bu işlem makinemde yerel olarak iyi çalışıyor. Ben kuyrukta veri yazma bir REST bitiş noktası oluşturdum ve veri kuyrukta yazıldıktan sonra, dinleyici devralacak ve veri okumak ve yürütmek. Azure'a konuşlandırdığımızda, günlüklerde görebildiğim ve Kuyrukların başlamasına izin vermeyen hata

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 sunucusunda dağıtılmış bir izleme sistemi olarak da mevcuttur ve sanırım bu x-request-id, sorunu yaratan Zipkin ile ilgilidir. Sorun için Google’da arama yaptım ancak bunun neden olduğunu anlayamadım.

Ayrıntılı hata mesajı aşağıdadır:

[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 sunucusu" nedir ve verileri JMS istemcinizden kullanmaya çalıştığınız kuyruğa nasıl yazıyor?
Justin Bertram

Yapıştırdığınız "ayrıntılı hata iletisindeki" asıl hata nerede? Bu sadece bazı hata ayıklama günlüğü gibi görünüyor.
Justin Bertram

Whee olduğunu şifresi?
user207421

Yanıtlar:


1

Hata mesajından, qpid JMS istemcisini kuyruklar üzerinden iletişim için kullandığınız açıktır. qpid istemcisi java değişkeni adlandırma kuralını ihlal eden herhangi bir anahtara izin vermez, örneğin qpid jms istemcisinin hata atacağı için tükettiği bir sıranın başlığında x-request-id gönderemezsiniz. Masmavi otobüste iletişim kurmaya çalışırken belirli başlıkları (aslında ihtiyacınız olmayan kimlik) kuyruğa eklememek için istio / zipkin'e dikkat etmeniz gerekir. Bu nedenle, kuyruklara / kuyruktan gelen isteklerin üstbilgiler olmadan yapılabilmesi için, kuyruk isteğini durdurmak için istio / zipkin kitaplıklarını devre dışı bırakmanız gerekir. Bu sorunu çözecektir.


4

JMS 2 belirtiminin Bölüm 3.5.1'i ileti özellikleri hakkında şunları belirtir:

Özellik adları, bir ileti seçici tanımlayıcısı kurallarına uymalıdır. Daha fazla bilgi için Bölüm 3.8 “Mesaj seçimi” kısmına bakın.

Tanımlayıcılarla ilgili olarak, bölüm 3.8.1.1 kısmen belirtmektedir:

Bir tanımlayıcı, bir Java tanımlayıcı başlangıç ​​karakteriyle başlaması gereken sınırsız uzunlukta bir karakter dizisidir; aşağıdaki tüm karakterler Java tanımlayıcı parça karakterleri olmalıdır. Tanımlayıcı başlangıç ​​karakteri, yöntemin Character.isJavaIdentifierStartdöndürdüğü herhangi bir karakterdir true. Buna '_' ve '$' dahildir. Tanımlayıcı parça karakteri, yöntemin Character.isJavaIdentifierPartdöndürdüğü herhangi bir karakterdir true.

Karakteri -ikisinden birine geçirirseniz Character.isJavaIdentifierStartveya Character.isJavaIdentifierPartdönüş değeri olur false. Başka bir deyişle, bir mesaj özelliğinin adında karakter JMS şartname ihlal ve bu nedenle hataya neden olur.-


0

Hata ayrıntıları (Java yığın izleme) burada gerçekten yararlı olacaktır.

Hata iletisine göre , ileti özelliklerinin adlarını denetleyen qpid JMS istemcisini kullanıyorsunuz . Bu adlar yalnızca geçerli Java tanımlayıcı karakterleri olan karakterler içerebilir .

'Queue-name' dizesinde Java tanımlayıcısı olmayan bir '-' karakteri vardır. Düzeltmek için, 'kuyruk adı' geçerli karakterler içeren bir şeye değiştirmeniz gerekir, örneğin 'queue_name' (alt çizgi ile) veya 'queueName' (deve örneği).


1
Soruyu ayrıntılı hata mesajıyla güncelledim. Üstbilgideki değerleri görebiliriz (yani x-request-id) sorunu yaratıyor. istio aracılığıyla ekleniyor. Ama bir şekilde JMS bunları ayrıştıramıyor.
Omar Bahir
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.