0
我們正在將審計日誌消息發送到RabbitMQ羣集,由於我們無法影響的原因,RabbitMQ羣集有時不可用。AMQP Appender掛起消息計數
當隊列不可用時,日誌消息開始在本地累積,最終在客戶端發生內存不足。
我們正在使用一個AMQP Appender來提交我們的消息。
有沒有一種方法,我們可以查詢待處理日誌消息的計數,並在消息開始累計時發出警報?
我們正在將審計日誌消息發送到RabbitMQ羣集,由於我們無法影響的原因,RabbitMQ羣集有時不可用。AMQP Appender掛起消息計數
當隊列不可用時,日誌消息開始在本地累積,最終在客戶端發生內存不足。
我們正在使用一個AMQP Appender來提交我們的消息。
有沒有一種方法,我們可以查詢待處理日誌消息的計數,並在消息開始累計時發出警報?
嗯,這是不可能的。沒有任何鉤子可以做到這一點。
儘管如此,您可以考慮將maxSenderRetries
從默認30
減少爲1
或2
。在此之後,你會開始失去日誌消息:
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。
謝謝,問題引發https://jira.spring.io/browse/AMQP-759 – Mandark