JMS 消息侦听器调用失败,原因:标识符包含无效的 JMS 标识符字符“-”:“x-request-id”

Oma*_*hir 9 java jms azure azure-queues zipkin

我第一次使用 JMS 和队列(Azure 队列)。我需要创建一个队列,Rubi 服务器将在其中写入一些数据,Java 将从队列中读取它并进行进一步的执行。这个过程在我的机器上本地运行良好。我创建了一个 REST 端点,它在队列中写入数据,一旦数据写入队列,侦听器将接管并读取数据并执行。当我们将它部署到 Azure 时,我在日志中看到的错误是不让队列启动

Setup of JMS message listener invoker failed for destination 'queue' - trying to recover. Cause: Identifier contains invalid JMS identifier character '-': 'x-request-id' 
Run Code Online (Sandbox Code Playgroud)

Zipkin 也作为分布式跟踪系统出现在 Azure 服务器上,我猜这x-request-id与产生问题的 Zipkin 有关。我在谷歌上搜索过这个问题,但不明白为什么会发生。

以下是详细的错误信息:

[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
Run Code Online (Sandbox Code Playgroud)

小智 1

从错误消息中可以明显看出您正在使用 qpid JMS 客户端通过队列进行通信。\nqpid 客户端不会\xe2\x80\x99t 允许任何违反 java 变量命名约定的键,例如,\xe2\x80\x99t 无法在队列\xe2\x80\x99s 标头中发送 x-request-id\nwhich qpid jms 客户端正在消耗,因为它 \xe2\x80\x99 会抛出错误。\n当尝试在 azure 总线上进行通信时,您需要注意 istio/zipkin,不要在队列中添加某些标头(您实际上不需要\xe2\x80\x99t)。\n因此,您必须禁用 istio/zipkin 库来拦截对队列的请求,以便可以在没有标头的情况下向/从队列发出请求。这将解决该问题。

\n