2

我正在玩 Camel,作为一个简单的测试用例,我想在传入消息中添加一个标头并将其存储在 JMS 队列(activemq)中。这是使用 REST dsl 的代码:

rest("/query-set")
  .id("queryset-route")
  .get("{id}")
      .route()
          .process((exchange) -> {
              exchange.getIn().setHeader("myHeader", constant(UUID.randomUUID()));
          })
          .setHeader(Exchange.HTTP_RESPONSE_CODE, constant(200))
      .endParent()
      .marshal().json(JsonLibrary.Jackson)
      .to("jms:queue:querysetRequests?exchangePattern=InOnly");

现在,当我使用 HTTPie (httpie.org) 进行 GET 时:

http -a admin:admin GET http://localhost:8080/camel/query-set/someId?key=value 'Foo:bar'

并检查队列中的消息,我注意到以下内容:

  • {id} 从 URL 中提取并作为 JMS 属性显示
  • http 查询参数 (key=value) 可用作 JMS 属性
  • 自定义 http 标头(Foo: bar)作为 JMS 属性存在
  • 基本身份验证标头 (admin:admin) 作为 JMS 属性存在

但是,我的以随机 UUID 作为值的自定义“myHeader”作为 JMS 属性存在。

我究竟做错了什么?

4

1 回答 1

1

您正在使用 aProcessor设置标题,因此您应该按原样设置标题值。你不应该使用常量,例如

exchange.getIn().setHeader("myHeader", UUID.randomUUID());

因为它只是普通的常规 Java 代码。

请注意,JMS 规范禁止 JMS 属性(又名 Camel 标头)中的某些类型。有一些细节:http ://camel.apache.org/jms

于 2018-03-21T16:02:38.097 回答