我们正在向 RabbitMQ 集群发送审核日志消息,该集群有时由于我们无法影响的原因而不可用。
当队列不可用时,日志消息开始在本地累积,我们最终会在客户端上出现内存不足。
我们正在使用 AMQP 追加器来提交我们的消息。
有没有办法查询待处理日志消息的计数并在消息开始累积时发出警报?
嗯,这是不可能的。只是没有任何钩子可以做到这一点。
但是,您可以考虑将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。