2017-01-19 3 views
0

Я занимаюсь разницей между тем, как JMSlistener выбрал сообщение и JMSTimestamp (который отправил производитель). Когда я вычисляю разницу между этими двумя значениями. Результат - отрицательное значение. Мне было интересно, как может быть 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()); 
     } 
} 

ответ

0

Скорее всего, системные часы на отправителе/​​приемник машина не синхронизированы.

Вы не можете полагаться на эти временные метки, если вы не храните часы разумно синхронизированными (например, ntpd).

+0

Большое спасибо Гэри. Но только несколько транзакций получают больше значения времени. – Pradeep

+0

Это, скорее всего, будет, даже если часы находятся всего в нескольких миллисекундах друг от друга. Если, скажем, часы отправителя на 30 мс превышают часы приемника, и только транзит брокеру занимает 20 мс, появится сообщение, прибывшее за 10 мс до его отправки. Если это linux, вы можете сравнить время с 'date +% s% 3N', чтобы получить время в миллисекундах с эпохи. –