如何在ApacheCamel中列出所有jms头属性?

如何在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

我正在尝试读取ApacheCamel路由中的jms头。下面是我阅读body&header的路线

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

您可以使用所有标题和属性记录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
根据注释,JMS头只允许某些类型作为头,camel将删除无效头。看起来HttpMethod(类型Enum)已被Camel删除。我在代码中所要做的就是在构造标头时将枚举转换为字符串

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容器中?感谢帮助我调试问题。感谢帮助我调试问题。