如何列出apache camel中的所有jms头属性?

时间:2015-12-30 13:44:08

标签: jms apache-camel activemq

我正在尝试读取apache-camel路由中的jms头。以下是我阅读身体和身体的路线。头。

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));
}

注意:我还尝试将标头ID记录为$ {header.id},而不是$ {header.Action},但没有任何内容正在打印。

我还想了解jms消息可用的所有标头。

3 个答案:

答案 0 :(得分:5)

您可以使用所有标头和属性记录交换,如下例所示:

[kafka-producer-network-thread | producer-1] WARN  o.a.kafka.common.network.Selector - Error in I/O with localhost/127.0.0.1
java.net.ConnectException: Connection refused: no further information
    at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[na:1.8.0_45]
    at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717) ~[na:1.8.0_45]
    at org.apache.kafka.common.network.Selector.poll(Selector.java:238) ~[kafka-clients-0.8.2.0.jar:na]
    at org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:192) [kafka-clients-0.8.2.0.jar:na]
    at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:191) [kafka-clients-0.8.2.0.jar:na]
    at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:122) [kafka-clients-0.8.2.0.jar:na]
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_45]

http://camel.apache.org/log.html

有关JMS标头的更多信息,请访问:http://camel.apache.org/jms.html

可能的标题列表:

  • 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。

答案 1 :(得分:0)

根据Claus Ibsen注释看起来像JMS标头只允许某些类型作为标头,而camel将删除无效标头。看起来HttpMethod(类型Enum)被Camel删除了。我在代码中所要做的就是在构造标题时将Enum转换为String。

headerMap.put("Action", action); 
          to
headerMap.put("Action", action.toString());

答案 2 :(得分:0)

可以通过运行以下命令从karaf客户端控制台查看JMS标头:

activemq:browse --amqurl tcp://localhost:61616 --msgsel JMSMessaageID='1' -Vheader TEST.FOO  

注意:以上都是示例值,根据您的配置进行更改。