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-id
está 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
Respuestas:
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.
fuente
La Sección 3.5.1 de la especificación JMS 2 establece esto sobre las propiedades del mensaje:
Con respecto a los identificadores, la sección 3.8.1.1 establece, en parte:
Si pasa el carácter
-
a cualquieraCharacter.isJavaIdentifierStart
oCharacter.isJavaIdentifierPart
el valor de retorno esfalse
. 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.fuente
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).
fuente