Estou trabalhando com JMS e filas (filas do Azure) pela primeira vez. Sou obrigado a criar uma fila em que o servidor Rubi gravará alguns dados e o Java os leria da fila e executaria mais. Esse processo está funcionando bem localmente na minha máquina. Eu criei um ponto de extremidade REST que está gravando dados na fila e, depois que os dados são gravados na fila, o ouvinte assume e lê os dados e executa. Quando o implantamos no Azure, o erro que vejo nos logs que não está permitindo o início das filas é
Setup of JMS message listener invoker failed for destination 'queue' - trying to recover. Cause: Identifier contains invalid JMS identifier character '-': 'x-request-id'
Zipkin também está presente no servidor do Azure como um sistema de rastreamento distribuído e acho que isso x-request-id
está relacionado ao Zipkin, que está criando o problema. Pesquisei no Google pelo problema, mas não conseguia entender por que isso está acontecendo.
A seguir, é apresentada uma mensagem de erro detalhada:
[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
Respostas:
Na mensagem de erro, é óbvio que você está usando o cliente qpid JMS para comunicação através de filas. O cliente qpid não permitirá nenhuma chave que viole a convenção de nomenclatura de variáveis java, por exemplo, você não poderá enviar x-request-id no cabeçalho de uma fila que o cliente qpid jms esteja consumindo, pois causará erro. Você precisa cuidar do istio / zipkin para não adicionar determinados cabeçalhos (você realmente não precisa deles) com a fila quando estiver tentando se comunicar no barramento azul. Portanto, você deve desativar as bibliotecas istio / zipkin para interceptar a solicitação de filas, para que a solicitação de / para a fila possa ser feita sem cabeçalhos. Isso resolverá o problema.
fonte
A seção 3.5.1 da especificação JMS 2 afirma isso sobre as propriedades da mensagem:
Em relação aos identificadores, a seção 3.8.1.1 declara, em parte:
Se você passar o caractere
-
para umCharacter.isJavaIdentifierStart
ouCharacter.isJavaIdentifierPart
o valor de retorno éfalse
. Em outras palavras, o-
caractere no nome de uma propriedade de mensagem viola a especificação JMS e, portanto, causará um erro.fonte
Detalhes de erro (rastreamento de pilha Java) seriam realmente úteis aqui.
Por mensagem de erro, presumo que você esteja usando o cliente qpid JMS , que está executando a verificação dos nomes das propriedades da mensagem. Esses nomes podem conter apenas caracteres, que são caracteres identificadores Java válidos .
Na sequência 'nome da fila', há um caractere '-', que não é um identificador Java. Para corrigir, você precisa alterar 'nome da fila' em algo com caracteres válidos, por exemplo 'nome_da_filme' (com sublinhado) ou 'nome_da_filme' (caixa de camelo).
fonte