Spring 对于少数事务,JMSTimestamp显示的时间比当前时间长

Spring 对于少数事务,JMSTimestamp显示的时间比当前时间长,spring,spring-jms,Spring,Spring Jms,我捕获了JMSlistener拾取消息的时间与JMSTimestamp(生产者已发送)之间的差异。当我计算这两个值之间的差值时。结果是负值。我想知道生产者设置的JMSTimestamp怎么可能大于消费者选择的时间 有人能帮我吗 下面是我返回的侦听器代码 @Override public void onMessage(Message message) { try { log.info("====Time taken by Listener to read:

我捕获了JMSlistener拾取消息的时间与JMSTimestamp(生产者已发送)之间的差异。当我计算这两个值之间的差值时。结果是负值。我想知道生产者设置的JMSTimestamp怎么可能大于消费者选择的时间

有人能帮我吗

下面是我返回的侦听器代码

@Override
public void onMessage(Message message) {

        try {
            log.info("====Time taken by Listener to read::==="
                    + (System.currentTimeMillis() - message
                            .getJMSTimestamp()) + " ms"); // I am getting negative value here

        } catch (JMSException e) {
            log.error("Error while reading the message", e.getMessage());
        }
}

发送方/接收方机器上的系统时钟很可能不同步


除非您合理地同步时钟(例如,
ntpd
),否则您不能依赖这些时间戳。

非常感谢Gary。但只有少数事务会获得更大的时间戳值,即使时钟间隔只有几毫秒,情况也可能如此。比如说,如果发送方时钟比接收方时钟早30毫秒,并且只需要20毫秒就可以传输代理,那么消息将在发送前10毫秒到达。如果是linux,您可以将时间与
date+%s%3N
进行比较,以获取从纪元开始的毫秒时间。