【问题标题】:Custom camel header not stored in JMS message property自定义驼峰标头未存储在 JMS 消息属性中
【发布时间】:2018-08-30 14:44:36
【问题描述】:

我正在使用 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'

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

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

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

我做错了什么?

【问题讨论】:

    标签: apache-camel camel-jms


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 如果这不起作用,请尝试使用 .toString() 将值强制为字符串
    猜你喜欢
    • 2015-09-27
    • 2015-10-01
    • 2016-06-14
    • 2019-03-24
    • 1970-01-01
    • 1970-01-01
    • 2017-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多