diff --git a/starters/threadpool/adapter/web/src/main/java/cn/hippo4j/springboot/starter/adapter/web/WebThreadPoolHandlerConfiguration.java b/starters/threadpool/adapter/web/src/main/java/cn/hippo4j/springboot/starter/adapter/web/WebThreadPoolHandlerConfiguration.java index 7dd86213..263317f7 100644 --- a/starters/threadpool/adapter/web/src/main/java/cn/hippo4j/springboot/starter/adapter/web/WebThreadPoolHandlerConfiguration.java +++ b/starters/threadpool/adapter/web/src/main/java/cn/hippo4j/springboot/starter/adapter/web/WebThreadPoolHandlerConfiguration.java @@ -105,8 +105,8 @@ public class WebThreadPoolHandlerConfiguration { * the Web embedded server loads the {@link ServletWebServerFactory} top-level interface type at the same time */ @Bean - public UndertowWebThreadPoolHandlerAdapt undertowWebThreadPoolHandler() { - return new DefaultUndertowWebThreadPoolHandler(); + public UndertowWebThreadPoolHandlerAdapt undertowWebThreadPoolHandler(WebThreadPoolRunStateHandler webThreadPoolRunStateHandler) { + return new DefaultUndertowWebThreadPoolHandler(webThreadPoolRunStateHandler); } } } diff --git a/starters/threadpool/config-spring-boot-1x/src/main/java/cn/hippo4j/config/springboot1x/starter/config/WebThreadPoolHandlerConfiguration1x.java b/starters/threadpool/config-spring-boot-1x/src/main/java/cn/hippo4j/config/springboot1x/starter/config/WebThreadPoolHandlerConfiguration1x.java index 80df456a..fa41e3f1 100644 --- a/starters/threadpool/config-spring-boot-1x/src/main/java/cn/hippo4j/config/springboot1x/starter/config/WebThreadPoolHandlerConfiguration1x.java +++ b/starters/threadpool/config-spring-boot-1x/src/main/java/cn/hippo4j/config/springboot1x/starter/config/WebThreadPoolHandlerConfiguration1x.java @@ -89,8 +89,8 @@ public class WebThreadPoolHandlerConfiguration1x { static class EmbeddedUndertow { @Bean - public WebThreadPoolService undertowWebThreadPoolHandler() { - return new UndertowWebThreadPoolHandler1x(); + public WebThreadPoolService undertowWebThreadPoolHandler(WebThreadPoolRunStateHandler webThreadPoolRunStateHandler) { + return new UndertowWebThreadPoolHandler1x(webThreadPoolRunStateHandler); } } } diff --git a/starters/threadpool/config-spring-boot-1x/src/main/java/cn/hippo4j/config/springboot1x/starter/web/undertow/UndertowWebThreadPoolHandler1x.java b/starters/threadpool/config-spring-boot-1x/src/main/java/cn/hippo4j/config/springboot1x/starter/web/undertow/UndertowWebThreadPoolHandler1x.java index 53e34907..b6b74ad0 100644 --- a/starters/threadpool/config-spring-boot-1x/src/main/java/cn/hippo4j/config/springboot1x/starter/web/undertow/UndertowWebThreadPoolHandler1x.java +++ b/starters/threadpool/config-spring-boot-1x/src/main/java/cn/hippo4j/config/springboot1x/starter/web/undertow/UndertowWebThreadPoolHandler1x.java @@ -19,6 +19,7 @@ package cn.hippo4j.config.springboot1x.starter.web.undertow; import cn.hippo4j.adapter.web.undertow.UndertowWebThreadPoolHandlerSupport; import cn.hippo4j.config.springboot1x.starter.web.AbstractWebThreadPoolService1x; +import cn.hippo4j.core.executor.state.AbstractThreadPoolRuntime; import io.undertow.Undertow; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.context.embedded.undertow.UndertowEmbeddedServletContainer; @@ -35,8 +36,8 @@ public class UndertowWebThreadPoolHandler1x extends AbstractWebThreadPoolService private static final String UNDERTOW_NAME = "undertow"; - public UndertowWebThreadPoolHandler1x() { - super(new UndertowWebThreadPoolHandlerSupport()); + public UndertowWebThreadPoolHandler1x(AbstractThreadPoolRuntime runtime) { + super(new UndertowWebThreadPoolHandlerSupport(runtime)); } @Override diff --git a/threadpool/adapter/web/src/main/java/cn/hippo4j/adapter/web/undertow/DefaultUndertowWebThreadPoolHandler.java b/threadpool/adapter/web/src/main/java/cn/hippo4j/adapter/web/undertow/DefaultUndertowWebThreadPoolHandler.java index 5b2f81ae..9e607b51 100644 --- a/threadpool/adapter/web/src/main/java/cn/hippo4j/adapter/web/undertow/DefaultUndertowWebThreadPoolHandler.java +++ b/threadpool/adapter/web/src/main/java/cn/hippo4j/adapter/web/undertow/DefaultUndertowWebThreadPoolHandler.java @@ -17,6 +17,7 @@ package cn.hippo4j.adapter.web.undertow; +import cn.hippo4j.core.executor.state.AbstractThreadPoolRuntime; import java.lang.reflect.Field; import java.util.Objects; import java.util.concurrent.Executor; @@ -39,8 +40,8 @@ public class DefaultUndertowWebThreadPoolHandler extends DefaultAbstractWebThrea private static final String UNDERTOW_NAME = "undertow"; - public DefaultUndertowWebThreadPoolHandler() { - super(new UndertowWebThreadPoolHandlerSupport()); + public DefaultUndertowWebThreadPoolHandler(AbstractThreadPoolRuntime runtime) { + super(new UndertowWebThreadPoolHandlerSupport(runtime)); } /** diff --git a/threadpool/adapter/web/src/main/java/cn/hippo4j/adapter/web/undertow/UndertowWebThreadPoolHandlerSupport.java b/threadpool/adapter/web/src/main/java/cn/hippo4j/adapter/web/undertow/UndertowWebThreadPoolHandlerSupport.java index 2d3d3c06..31c533f7 100644 --- a/threadpool/adapter/web/src/main/java/cn/hippo4j/adapter/web/undertow/UndertowWebThreadPoolHandlerSupport.java +++ b/threadpool/adapter/web/src/main/java/cn/hippo4j/adapter/web/undertow/UndertowWebThreadPoolHandlerSupport.java @@ -25,8 +25,11 @@ import cn.hippo4j.common.model.ThreadPoolParameter; import cn.hippo4j.common.model.ThreadPoolParameterInfo; import cn.hippo4j.common.model.ThreadPoolRunStateInfo; import cn.hippo4j.common.toolkit.CalculateUtil; +import cn.hippo4j.common.toolkit.ReflectUtil; import cn.hippo4j.core.executor.DynamicThreadPoolExecutor; +import cn.hippo4j.core.executor.state.AbstractThreadPoolRuntime; import lombok.extern.slf4j.Slf4j; +import org.jboss.threads.EnhancedQueueExecutor; import org.springframework.util.ReflectionUtils; import org.xnio.Options; import org.xnio.XnioWorker; @@ -44,8 +47,14 @@ import java.util.concurrent.Executor; @Slf4j public class UndertowWebThreadPoolHandlerSupport implements IWebThreadPoolHandlerSupport { + private final AbstractThreadPoolRuntime runtime; + private Executor executor; + public UndertowWebThreadPoolHandlerSupport(AbstractThreadPoolRuntime runtime) { + this.runtime = runtime; + } + /** * A callback will be invoked and the Executor will be set up when the web container has been started. * @param executor Thread-pool executor in Undertow container. @@ -67,8 +76,13 @@ public class UndertowWebThreadPoolHandlerSupport implements IWebThreadPoolHandle poolBaseInfo.setCoreSize(coreSize); poolBaseInfo.setMaximumSize(maximumPoolSize); poolBaseInfo.setKeepAliveTime((long) keepAliveTime); - poolBaseInfo.setRejectedName("-"); - poolBaseInfo.setQueueType("-"); + poolBaseInfo.setRejectedName("RejectedExecutionException"); + poolBaseInfo.setQueueType("org.jboss.threads.EnhancedQueueExecutor.TaskNode:FIFO"); + + EnhancedQueueExecutor enhancedQueueExecutor = + (EnhancedQueueExecutor) ReflectUtil.getFieldValue( + ReflectUtil.getFieldValue(xnioWorker, "taskPool"), "executor"); + poolBaseInfo.setQueueCapacity(enhancedQueueExecutor.getQueueSize()); } catch (Exception ex) { log.error("The undertow container failed to get thread pool parameters.", ex); } @@ -127,7 +141,7 @@ public class UndertowWebThreadPoolHandlerSupport implements IWebThreadPoolHandle stateInfo.setRejectCount(rejectCount); stateInfo.setClientLastRefreshTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); stateInfo.setTimestamp(System.currentTimeMillis()); - return stateInfo; + return runtime.supplement(stateInfo); } @Override