【问题标题】:JMSTimestamp Vs Other Date storing headers on a JMS messageJMSTimestamp 与其他在 JMS 消息上存储标头的日期
【发布时间】:2020-03-09 20:32:28
【问题描述】:

我正在使用 AMQs REST API 向队列发送消息,并在 queryString 中设置了标头。

我正在使用 UNIX 时间戳的毫秒值设置日期标题 myDateHeader

&myDateHeader=1583781133771

JMSTimestamp 标头正在为我自动设置,而且似乎也设置为长....

然后我用骆驼消费这条消息,尽管是在 Talend 中,并且可以“解析”JMSTimestamp 到格式化的日期。

但是,当我尝试对 myDateHeader 执行相同操作时,我得到了 null 回复。

如果我“解析”为StringLongJMSTimestampmyDateHeader 都会显示值,因此作为日期解析的一部分(不)会发生某些事情。

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 调用进行更改?

请原谅我的猜测,但我希望有人可以确认上述内容,因此我在使用这些消息时不能将myDateHeaderJMSTimestamp 标头相同?

谢谢

【问题讨论】:

  • 不管怎样,我不相信有任何方法可以通过 REST 管理 API 设置标头的类型。

标签: apache-camel jms activemq


【解决方案1】:

您的第二个假设是正确的。自定义标头使用 String 类型解析。在 Talend 以及 Talend ESB 的底层集成框架 Apache Camel 中,包括 JMSTimestamp 在内的预定义 JMS 标头会根据 the "Message format when receiving" reference table 转换为 Java 类型。

【讨论】:

    猜你喜欢
    • 2018-08-30
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    相关资源
    最近更新 更多