Я использую сервер Netty для загрузочного приложения Spring. Можно ли каким-либо образом отслеживать размер очереди сервера Netty, чтобы мы знали, заполнена ли очередь и сервер не может принять новый запрос? Кроме того, есть ли какое-либо ведение журнала сервером netty, если очередь заполнена или не может принять новый запрос?
Netty — Мониторинг очереди EventLoop
Ответы (1)
У Netty нет журнала для этой цели, но я реализовал способ найти ожидающие задачи и разместить некоторые журналы в соответствии с вашим вопросом. вот пример журнала из моего локального
вы можете найти весь код здесь https://github.com/ozkanpakdil/spring-examples/tree/master/reactive-netty-check-connection-queue
О коде, который сам по себе очень понятен, но NettyConfigure фактически выполняет настройку netty в среде весенней загрузки. в https://github.com/ozkanpakdil/spring-examples/blob/master/reactive-netty-check-connection-queue/src/main/java/com/mascix/reactivenettycheckconnectionqueue/NettyConfigure.java#L46 вы можете увидеть, сколько ожидающих задач в очереди. DiscardServerHandler может помочь вам сбросить, если лимит заполнен. Вы можете использовать jmeter для теста, вот файл jmeter https://github.com/ozkanpakdil/spring-examples/blob/master/reactive-netty-check-connection-queue/PerformanceTestPlanMemoryThread.jmx
если вы хотите обработать ограничение netty, вы можете сделать это, как код ниже
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
totalConnectionCount.incrementAndGet();
if (ctx.channel().isWritable() == false) { // means we hit the max limit of netty
System.out.println("I suggest we should restart or put a new server to our pool :)");
}
super.channelActive(ctx);
}
Вы должны проверить https://stackoverflow.com/a/49823055/175554 для обработки ограничений, и вот еще одно объяснение о isWritable https://stackoverflow.com/a/44564482/175554
Еще одно дополнение, я разместил приводы в месте http://localhost:8080/actuator/metrics/http.server.requests, это тоже неплохо проверить.