我正在尝试读取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消息可用的所有标头。
答案 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
可能的标题列表:
答案 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
注意:以上都是示例值,根据您的配置进行更改。