diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/ThreadPoolAdapterService.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/ThreadPoolAdapterService.java index 1915ad04..fe30cfb9 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/ThreadPoolAdapterService.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/ThreadPoolAdapterService.java @@ -115,25 +115,28 @@ public class ThreadPoolAdapterService { return result; } + public static void remove(String identify) { + synchronized (ThreadPoolAdapterService.class) { + THREAD_POOL_ADAPTER_MAP.values().forEach(each -> each.forEach((key, val) -> { + val.forEach((threadPoolKey, states) -> { + Iterator iterator = states.iterator(); + while (iterator.hasNext()) { + ThreadPoolAdapterState adapterState = iterator.next(); + if (Objects.equals(adapterState.getIdentify(), identify)) { + iterator.remove(); + } + } + }); + })); + } + } + static class ClearThreadPoolAdapterCache implements Observer { @Override public void accept(ObserverMessage observerMessage) { - log.info("Clean up the configuration cache. Key :: {}", observerMessage.message()); - String identify = observerMessage.message(); - synchronized (ThreadPoolAdapterService.class) { - THREAD_POOL_ADAPTER_MAP.values().forEach(each -> each.forEach((key, val) -> { - val.forEach((threadPoolKey, states) -> { - Iterator iterator = states.iterator(); - while (iterator.hasNext()) { - ThreadPoolAdapterState adapterState = iterator.next(); - if (Objects.equals(adapterState.getIdentify(), identify)) { - iterator.remove(); - } - } - }); - })); - } + log.info("Clean up the thread-pool adapter cache. Key :: {}", observerMessage.message()); + remove(observerMessage.message()); } } } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/handler/RemoveThreadPoolAdapterCache.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/handler/RemoveThreadPoolAdapterCache.java new file mode 100644 index 00000000..fb2bfb60 --- /dev/null +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/handler/RemoveThreadPoolAdapterCache.java @@ -0,0 +1,38 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.hippo4j.config.service.handler; + +import cn.hippo4j.common.api.ClientCloseHookExecute; +import cn.hippo4j.common.toolkit.JSONUtil; +import cn.hippo4j.config.service.ThreadPoolAdapterService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * Remove thread pool adapter cache + */ +@Slf4j +@Component +public class RemoveThreadPoolAdapterCache implements ClientCloseHookExecute { + + @Override + public void closeHook(ClientCloseHookReq requestParam) { + log.info("Remove thread-pool adapter cache, Execute client hook function. Req :: {}", JSONUtil.toJSONString(requestParam)); + ThreadPoolAdapterService.remove(requestParam.getInstanceId()); + } +}