El invocador de escucha del mensaje JMS falló, Causa: el identificador contiene un carácter identificador JMS no válido '-': 'x-request-id'

9

Estoy trabajando con JMS y colas (colas de Azure) por primera vez. Tengo que hacer una cola donde el servidor Rubi escribiría algunos datos y Java los leería desde la cola y realizará más ejecuciones. Este proceso funciona bien localmente en mi máquina. He creado un punto final REST que está escribiendo datos en la cola y una vez que los datos se escriben en la cola, el oyente se hace cargo y lee los datos y los ejecuta. Cuando lo implementamos en Azure, el error que puedo ver en los registros que no permite que comiencen las Colas es

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

Zipkin también está presente en el servidor de Azure como un sistema de rastreo distribuido y supongo que esto x-request-idestá relacionado con Zipkin, que está creando el problema. Busqué el problema en Google, pero no pude entender por qué está sucediendo.

A continuación se muestra un mensaje de error detallado:

[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
fuente
¿Qué es el "servidor Rubi" y cómo escribe los datos en la cola que está intentando usar desde su cliente JMS?
Justin Bertram
¿Dónde está el error real en el "mensaje de error detallado" que pegó? Eso solo parece un registro de depuración.
Justin Bertram
¿Dónde está el código?
user207421

Respuestas:

1

Desde el mensaje de error, es obvio que está utilizando el cliente qpid JMS para la comunicación a través de colas. El cliente qpid no permitirá ninguna clave que viole la convención de nomenclatura de variables de Java, por ejemplo, no podrá enviar x-request-id en el encabezado de una cola que el cliente qpid jms está consumiendo, ya que arrojará un error. Debe cuidar istio / zipkin para no agregar ciertos encabezados (identificación que no los necesita realmente) con la cola cuando intenta comunicarse en el bus azul. Por lo tanto, debe deshabilitar las bibliotecas istio / zipkin para interceptar la solicitud de colas para que la solicitud a / desde la cola se pueda realizar sin encabezados. Esto solucionará el problema.

usuario11377504
fuente
4

La Sección 3.5.1 de la especificación JMS 2 establece esto sobre las propiedades del mensaje:

Los nombres de propiedad deben obedecer las reglas para un identificador de selector de mensaje. Consulte la Sección 3.8 "Selección de mensajes" para obtener más información.

Con respecto a los identificadores, la sección 3.8.1.1 establece, en parte:

Un identificador es una secuencia de caracteres de longitud ilimitada que debe comenzar con un carácter de inicio de identificador Java; Todos los caracteres siguientes deben ser caracteres de parte del identificador Java. Un carácter de inicio de identificador es cualquier carácter para el que Character.isJavaIdentifierStartdevuelve el método true. Esto incluye '_' y '$'. Un carácter de parte identificador es cualquier carácter para el que Character.isJavaIdentifierPartdevuelve el método true.

Si pasa el carácter -a cualquiera Character.isJavaIdentifierStarto Character.isJavaIdentifierPartel valor de retorno es false. En otras palabras, el -carácter en el nombre de una propiedad de mensaje viola la especificación JMS y, por lo tanto, causará un error.

Justin Bertram
fuente
0

Los detalles de error (seguimiento de pila de Java) serían realmente útiles aquí.

Por mensaje de error, supongo que está utilizando el cliente qpid JMS , que está realizando la verificación de los nombres de las propiedades del mensaje. Estos nombres pueden contener solo caracteres, que son caracteres de identificación de Java válidos .

En la cadena 'nombre-cola' hay un carácter '-', que no es un identificador de Java. Para solucionarlo, debe cambiar 'queue-name' en algo con caracteres válidos, por ejemplo 'queue_name' (con guión bajo) o 'queueName' (caso de camello).

Son tan
fuente
1
He actualizado la pregunta con un mensaje de error detallado. Podemos ver los valores en el encabezado (es decir, x-request-id) está creando el problema. se está agregando a través de istio. Pero de alguna manera JMS no puede analizarlos.
Omar Bahir