2017-08-02 121 views
0

我們正在將審計日誌消息發送到RabbitMQ羣集,由於我們無法影響的原因,RabbitMQ羣集有時不可用。AMQP Appender掛起消息計數

當隊列不可用時,日誌消息開始在本地累積,最終在客戶端發生內存不足。

我們正在使用一個AMQP Appender來提交我們的消息。

有沒有一種方法,我們可以查詢待處理日誌消息的計數,並在消息開始累計時發出警報?

回答

1

嗯,這是不可能的。沒有任何鉤子可以做到這一點。

儘管如此,您可以考慮將maxSenderRetries從默認30減少爲12。在此之後,你會開始失去日誌消息:

int retries = event.incrementRetries(); 
if (retries < AmqpAppender.this.maxSenderRetries) { 
    // Schedule a retry based on the number of times I've tried to re-send this 
    AmqpAppender.this.retryTimer.schedule(new TimerTask() { 
      @Override 
      public void run() { 
       AmqpAppender.this.events.add(event); 
      } 
     }, (long) (Math.pow(retries, Math.log(retries)) * 1000)); 
} 
else { 
    addError("Could not send log message " + logEvent.getMessage() 
       + " after " + AmqpAppender.this.maxSenderRetries + " retries", e); 
} 

我們就不得不暴露queueSize選項,而不是默認的:

public LinkedBlockingQueue() { 
    this(Integer.MAX_VALUE); 
} 

隨意就此事提出一個JIRA

+0

謝謝,問題引發https://jira.spring.io/browse/AMQP-759 – Mandark