Apache camel 自定义骆驼头未存储在JMS消息属性中
我正在使用Camel,作为一个简单的测试用例,我想向传入消息添加一个头并将其存储在JMS队列(activemq)中。这是使用REST dsl的代码:Apache camel 自定义骆驼头未存储在JMS消息属性中,apache-camel,camel-jms,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(UU
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时:
并检查队列中的消息,我注意到以下内容:
- {id}是从URL中提取的,并作为JMS属性呈现
- http查询参数(key=value)作为JMS属性提供
- 自定义http头(Foo:bar)作为JMS属性存在
- 基本身份验证头(admin:admin)作为JMS属性存在
我做错了什么?您正在使用
处理器设置标头,因此您应该按原样设置标头值。你不应该使用常量,例如
exchange.getIn().setHeader("myHeader", UUID.randomUUID());
因为它只是普通的Java代码
请注意,JMS规范禁止JMS属性中的某些类型(即骆驼头)。以下是一些详细信息:如果这不起作用,请尝试使用.toString()将值强制为字符串。
exchange.getIn().setHeader("myHeader", UUID.randomUUID());