【发布时间】:2020-03-09 20:32:28
【问题描述】:
我正在使用 AMQs REST API 向队列发送消息,并在 queryString 中设置了标头。
我正在使用 UNIX 时间戳的毫秒值设置日期标题 myDateHeader。
&myDateHeader=1583781133771
JMSTimestamp 标头正在为我自动设置,而且似乎也设置为长....
然后我用骆驼消费这条消息,尽管是在 Talend 中,并且可以“解析”JMSTimestamp 到格式化的日期。
但是,当我尝试对 myDateHeader 执行相同操作时,我得到了 null 回复。
如果我“解析”为String 和Long,JMSTimestamp 和 myDateHeader 都会显示值,因此作为日期解析的一部分(不)会发生某些事情。
Talend 代码展示
row5.Event_Timestamp = org.apache.camel.builder.SimpleBuilder
.simple("${in.header.myDateHeader}")
.evaluate(routerExchange, java.util.Date.class);
根据SimpleBuilder 类显示正确的resultType。该代码与解析JMSTimestamp生成的代码相同。
当我尝试时
simple("${date:in.header.myDateHeader:yyyyMMdd}")
我明白了
java.lang.IllegalArgumentException: Cannot find java.util.Date object at command: in.header.myDateHeader
我猜:
1) 创建消息时,需要将标头设置为Date 的正确类型,以便能够将此日期解析作为消费的一部分?
2) 并且 REST API 将所有标头设置为 String 类型,而我无法通过我的 REST 调用进行更改?
请原谅我的猜测,但我希望有人可以确认上述内容,因此我在使用这些消息时不能将myDateHeader 与JMSTimestamp 标头相同?
谢谢
【问题讨论】:
-
不管怎样,我不相信有任何方法可以通过 REST 管理 API 设置标头的类型。
标签: apache-camel jms activemq