自定义camel标头未存储在JMS消息属性中

时间:2018-03-21 13:01:22

标签: apache-camel camel-jms

我正在使用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属性
  • 出现
  • Basic auth标头(admin:admin)作为JMS属性
  • 出现

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

我做错了什么?

1 个答案:

答案 0 :(得分:0)

您正在使用Processor来设置标头,因此您应该按原样设置标头值。你应该使用常量,例如

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

作为其简单的常规Java代码。

请注意,JMS规范禁止JMS属性中的某些类型(也称为Camel头)。有以下详细信息:http://camel.apache.org/jms