2017-12-12 10 views
0

나는 RabbitMQ 3.7과 플러그인 rabbitmq_message_timestamp을 사용하여 메시지가 RabbitMQ에 처음 들어가면 (모니터링 목적으로) 타임 스탬프를 추가합니다.토끼 head_message_timestamp을 Java LocalDateTime으로 변환하는 방법?

timestamp에 액세스 할 수 있습니다. RabbitMQ Management HTTP API을 통해

너무 오래 기다리는 메시지를 찾으려면 어떻게 Java LocalDateTime으로 변환 할 수 있습니까? 사용

편집

샘플 감시 코드 @ 니콜라 - natea 팁 :

타임 스탬프은 초 단위로 제공 (또는 MS : https://github.com/rabbitmq/rabbitmq-message-timestamp/issues/16를)되어
public class QueueState { 
    private static final int ALARMING_PROCESSING_TIME_IN_SECONDS = 5 * 60; 
    private static final int ALARMING_MESSAGE_TRAFFIC_JAM_LENGTH = 20; 
    private final QueueId qid; 
    private int messagesCount = 0; 
    private Long headMessageTimestamp = null; 

    @JsonCreator 
    public QueueState(
      @JsonProperty("vhost") String vhost, 
      @JsonProperty("name") String name, 
      @JsonProperty("messages") Integer messagesCount, 
      @JsonProperty("head_message_timestamp") Long headMessageTimestamp 
    ) { 
     this.qid = new QueueId(vhost, name); 
     this.messagesCount = messagesCount == null ? 0 : messagesCount; 
     this.headMessageTimestamp = headMessageTimestamp; 
    } 

    public boolean isAlarmingState() { 
     return (messagesCount == -1) 
       || (messagesCount > ALARMING_MESSAGE_TRAFFIC_JAM_LENGTH) 
       || isHeadMessageWaitingTooLong(); 
    } 

    private boolean isHeadMessageWaitingTooLong() { 
     if ((messagesCount > 0) && (headMessageTimestamp != null)) { 
      long nowTs = ZonedDateTime.now(ZoneOffset.UTC).toEpochSecond(); 
      long thresholdTs = headMessageTimestamp + ALARMING_PROCESSING_TIME_IN_SECONDS; 
      return nowTs > thresholdTs; 
     } 
     return false; 
    } 
} 

답변

1

그래서 당신은 사용할 수 있습니다

LocalDateTime dateTime = LocalDateTime.ofEpochSecond(seconds, 0, ZoneOffset.UTC) 
한편,

, rabbitmq에서 제공 한 타임 스탬프를 변환하는 대신 현재 신기원을 얻을 수 있습니다. 같은해야한다 : 도움을

long epoch = whateverThresholdDateTime.toEpochSecond(); 
+0

덕분에, 추가 링크 : https://github.com/rabbitmq/rabbitmq-message-timestamp/blob/master/src/rabbit_timestamp_interceptor.erl 에 http : // 얼랑 .org/doc/man/os.html # system_time-0 – wildloop

+0

한 번 더 문제가 있습니다. rabbitmq를 다시 시작한 후'head_message_timestamp' (플러그인 별)가 손실됩니다. 당신도 똑같은 행동을합니까? – wildloop