如何在ApacheCamel中列出所有jms头属性?
我正在尝试读取ApacheCamel路由中的jms头。下面是我阅读body&header的路线如何在ApacheCamel中列出所有jms头属性?,jms,apache-camel,activemq,Jms,Apache Camel,Activemq,我正在尝试读取ApacheCamel路由中的jms头。下面是我阅读body&header的路线 String endPointTopic = "activemq:topic:geoLoc"; String endPointTopicOut = endPointTopic + "_outbox"; from(endPointTopic) .log("Message from Topic is ${body} & header is ${he
String endPointTopic = "activemq:topic:geoLoc";
String endPointTopicOut = endPointTopic + "_outbox";
from(endPointTopic)
.log("Message from Topic is ${body} & header is ${header.Action}")
.to(endPointTopicOut);
基本上,从日志中我可以看到以下内容,这意味着我可以读取正文,但不能读取标题中的id
来自主题的消息是GeoLocationInfoDTO{id=2,geoLocationUUId='null',
geoLocationName='null',geoLocationDesc='null',
geoLocationPolygon='null',geoLocationCenterLatitude='null',
geoLocationCenterLongitude='null'}&标题为
下面是通过jms模板将消息发布到activeMQ的代码
private MessageHeaders getMessageHeaders(HttpMethod action) {
log.debug("DomainPublisher : getMessageHeaders");
Map <String, Object> headerMap = new HashMap<>();
headerMap.put("Action", action);
return new MessageHeaders(headerMap);
}
public void publish(BaseDTO dto, HttpMethod action) {
log.debug("DomainPublisher : type is : {} : ", dto.getClass().getName());
getJmsMessagingTemplate().convertAndSend(topicMap.get(dto.getClass().getName()), dto, getMessageHeaders(action));
}
private MessageHeaders getMessageHeaders(HttpMethod操作){
调试(“DomainPublisher:getMessageHeaders”);
Map headerMap=newhashmap();
首脑会议提出(“行动”,行动);
返回新的消息头(headerMap);
}
公共无效发布(BaseDTO dto、HttpMethod操作){
debug(“DomainPublisher:类型为:{}:,dto.getClass().getName());
getJMSMessageTemplate().convertAndSend(topicMap.get(dto.getClass().getName()),dto,getMessageHeaders(action));
}
注意:我还尝试记录头id,比如${header.id},而不是${header.Action},但是没有打印任何内容。
我还想知道jms消息可用的所有头。您可以使用所有头和属性记录exchange,如本例所示:
.to("log:like-to-see-all?level=INFO&showAll=true&multiline=true")
有关JMS标头的更多信息,请参见此处:
可能的标题列表:
- JMSCorrelationID—JMS关联ID
- JMSDeliveryMode—JMS交付模式
- JMSDestination—JMS目标
- JMSExpiration—JMS过期
- JMSMessageID—JMS唯一消息ID
- JMSPriority—JMS优先级(0为最低优先级,9为最高优先级)
- JMSRedelivered—是重新传递的JMS消息
- JMSReplyTo—对目标的JMS回复
- JMSTimestamp—JMS时间戳
- JMSType—JMS类型
- JMSXGroupID—JMS组ID
.to("log:like-to-see-all?level=INFO&showAll=true&multiline=true")
有关JMS标头的更多信息,请参见此处:
可能的标题列表:
- JMSCorrelationID—JMS关联ID
- JMSDeliveryMode—JMS交付模式
- JMSDestination—JMS目标
- JMSExpiration—JMS过期
- JMSMessageID—JMS唯一消息ID
- JMSPriority—JMS优先级(0为最低优先级,9为最高优先级)
- JMSRedelivered—是重新传递的JMS消息
- JMSReplyTo—对目标的JMS回复
- JMSTimestamp—JMS时间戳
- JMSType—JMS类型
- JMSXGroupID—JMS组ID
headerMap.put("Action", action);
to
headerMap.put("Action", action.toString());
根据注释,JMS头只允许某些类型作为头,驼峰将删除无效头。看起来HttpMethod(类型Enum)已被Camel删除。我在代码中所要做的就是在构造标头时将枚举转换为字符串
headerMap.put("Action", action);
to
headerMap.put("Action", action.toString());
通过运行以下命令,可以从karaf客户端控制台查看JMS头:
activemq:browse --amqurl tcp://localhost:61616 --msgsel JMSMessaageID='1' -Vheader TEST.FOO
注意:以上都是示例值,根据您的配置进行更改 通过运行以下命令,可以从karaf客户端控制台查看JMS头:
activemq:browse --amqurl tcp://localhost:61616 --msgsel JMSMessaageID='1' -Vheader TEST.FOO
注意:以上都是示例值,根据您的配置进行更改 如果您在此处发布日志(.
到(“log:like to see all?level=INFO&showAll=true&multiline=true”)
),这将帮助我们了解问题所在。您是否将代码部署到karaf容器中?如果您在此处发布日志(.到(“log:like to see all?level=INFO&showAll=true&multiline=true”)
),这将帮助我们了解问题所在。您是否将代码部署到karaf容器中?感谢帮助我调试问题。感谢帮助我调试问题。