Trình nghe tin nhắn JMS invoker không thành công, Nguyên nhân: Mã định danh chứa ký tự định danh JMS không hợp lệ '-': 'x-request-id'


9

Tôi đang làm việc với JMS và hàng đợi (hàng đợi Azure) lần đầu tiên. Tôi được yêu cầu tạo một hàng đợi trong đó máy chủ Rubi sẽ ghi một số dữ liệu và Java sẽ đọc nó từ hàng đợi và sẽ thực hiện thêm. Quá trình này đang hoạt động tốt trên máy tính của tôi. Tôi đã tạo một điểm cuối REST ghi dữ liệu trong hàng đợi và một khi dữ liệu được ghi trong hàng đợi, người nghe sẽ tiếp nhận và đọc dữ liệu và thực thi. Khi chúng tôi triển khai nó sang Azure, lỗi tôi có thể thấy trong các bản ghi không cho phép Hàng đợi bắt đầu là

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

Zipkin cũng có mặt trên máy chủ Azure dưới dạng hệ thống theo dõi phân tán và tôi đoán điều này x-request-idcó liên quan đến Zipkin đang tạo ra sự cố. Tôi đã tìm kiếm vấn đề của Google nhưng không thể hiểu tại sao nó lại xảy ra.

Sau đây là thông báo lỗi chi tiết:

[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

"Máy chủ Rubi" là gì và cách ghi dữ liệu vào hàng đợi mà bạn đang cố sử dụng từ máy khách JMS của mình?
Justin Bertram

Đâu là lỗi thực tế trong "thông báo lỗi chi tiết" mà bạn đã dán? Điều đó trông giống như một số ghi nhật ký gỡ lỗi.
Justin Bertram

Whee là mã?
dùng207421

Câu trả lời:


1

Từ thông báo lỗi, rõ ràng là bạn đang sử dụng máy khách JMS qpid để liên lạc qua hàng đợi. qpid client sẽ không cho phép bất kỳ khóa nào vi phạm quy ước đặt tên biến java, ví dụ: bạn sẽ không thể gửi x-request-id trong tiêu đề của hàng đợi mà máy khách qpid jms đang sử dụng vì nó sẽ gây ra lỗi. Bạn cần quan tâm đến istio / zipkin để không thêm các tiêu đề nhất định (id bạn không thực sự cần chúng) với hàng đợi khi nó cố gắng giao tiếp trên xe buýt màu xanh. Vì vậy, bạn phải vô hiệu hóa các thư viện istio / zipkin để chặn yêu cầu hàng đợi để yêu cầu đến / từ hàng đợi có thể được thực hiện mà không cần tiêu đề. Điều này sẽ khắc phục vấn đề.


4

Mục 3.5.1 của đặc tả JMS 2 nêu điều này về các thuộc tính thông báo:

Tên thuộc tính phải tuân theo các quy tắc cho một định danh bộ chọn thư. Xem mục 3.8 Lựa chọn tin nhắn của người dùng để biết thêm thông tin.

Liên quan đến định danh, phần 3.8.1.1, một phần:

Mã định danh là một chuỗi ký tự có độ dài không giới hạn phải bắt đầu bằng ký tự bắt đầu mã định danh Java; tất cả các ký tự sau phải là các ký tự phần định danh Java. Một ký tự bắt đầu định danh là bất kỳ ký tự nào mà phương thức Character.isJavaIdentifierStarttrả về true. Điều này bao gồm '_' và '$'. Một ký tự một phần định danh là bất kỳ ký tự nào mà phương thức Character.isJavaIdentifierParttrả về true.

Nếu bạn chuyển ký tự -vào một trong hai Character.isJavaIdentifierStarthoặc Character.isJavaIdentifierPartgiá trị trả về là false. Nói cách khác, các -nhân vật trong tên của một tài sản nhắn vi phạm đặc tả JMS và do đó sẽ gây ra lỗi.


0

Chi tiết về lỗi (theo dõi ngăn xếp Java) sẽ thực sự hữu ích ở đây.

Theo thông báo lỗi tôi giả sử, bạn đang sử dụng máy khách JMS của qpid , đang thực hiện kiểm tra tên thuộc tính của thông báo. Các tên này chỉ có thể chứa các ký tự, là các ký tự định danh Java hợp lệ .

Trong chuỗi 'tên hàng đợi' có ký tự '-', đó không phải là định danh Java. Để khắc phục, bạn cần thay đổi 'tên hàng đợi' thành một cái gì đó có các ký tự hợp lệ, ví dụ 'queue_name' (với dấu gạch dưới) hoặc 'queueName' (trường hợp lạc đà).


1
Tôi đã cập nhật câu hỏi với thông báo lỗi chi tiết. Chúng ta có thể thấy các giá trị trong tiêu đề (tức là x-request-id) đang tạo ra vấn đề. nó được thêm vào thông qua istio. Nhưng bằng cách nào đó JMS không thể phân tích cú pháp này.
Omar Bahir
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.