Apache camel JMSTimestamp与JMS消息上其他日期存储头的比较
我正在使用AMQs REST API将消息发送到queryString中设置了头的队列 我正在使用UNIX时间戳的毫秒值设置日期头Apache camel JMSTimestamp与JMS消息上其他日期存储头的比较,apache-camel,jms,activemq,Apache Camel,Jms,Activemq,我正在使用AMQs REST API将消息发送到queryString中设置了头的队列 我正在使用UNIX时间戳的毫秒值设置日期头myDateHeader &myDateHeader=1583781133771 jmstiestamp标题正在为我自动设置,并且似乎也被设置为长 然后,我使用camel(尽管是在Talend中)使用此消息,并可以将jmstiestamp解析为格式化日期 但是,当我尝试对myDateHeader执行相同操作时,我得到了null返回 如果我“解析”到String和Lon
myDateHeader
&myDateHeader=1583781133771
jmstiestamp
标题正在为我自动设置,并且似乎也被设置为长
然后,我使用camel(尽管是在Talend中)使用此消息,并可以将jmstiestamp
解析为格式化日期
但是,当我尝试对myDateHeader
执行相同操作时,我得到了null
返回
如果我“解析”到String
和Long
,则jmstiestamp
和myDateHeader
都会显示值,因此在日期解析过程中(不会)发生某些事情
Talend代码显示
row5.Event_Timestamp = org.apache.camel.builder.SimpleBuilder
.simple("${in.header.myDateHeader}")
.evaluate(routerExchange, java.util.Date.class);
按照SimpleBuilder
类显示正确的resultType
。代码与解析jmstiestamp
时生成的代码相同
当我尝试的时候
simple(${date:in.header.myDateHeader:yyyyymmdd}”)
我明白了
java.lang.IllegalArgumentException: Cannot find java.util.Date object at command: in.header.myDateHeader
我猜:
1) 创建消息时,需要使用正确类型的Date
设置消息头,才能将此日期解析作为消费的一部分
2) RESTAPI将所有头文件的类型设置为String
,而我不能通过REST调用来更改它
请原谅我的猜测,但我希望有人能证实上述内容,因此,在使用这些消息时,我不能将myDateHeader
与jmstiestamp
头处理得一样
谢谢你的第二个假设是正确的。自定义标题使用类型
字符串进行解析。在Talend中,以及作为Talend ESB底层集成框架的Apache Camel中,预定义的JMS头(包括jmstiestamp
)根据转换为Java类型。无论如何,我认为没有任何方法可以通过REST管理API设置头的类型。