🔥 强大的动态线程池,附带监控线程池功能(没有依赖任何中间件)。Powerful dynamic thread pool, does not rely on any middleware, with monitoring thread pool function.

Overview

🔥   动态线程池系统,包含 Server 端及 SpringBoot Client 端需引入的 Starter.

LICENSE


动态线程池监控,主意来源于美团技术公众号 点击查看美团线程池文章


看了文章后深受感触,再加上最近线上线程池的不可控以及不可逆等问题,想做出一个 兼容性、功能性、易上手等特性 集于一身的的开源项目,目标还是要有的


目前项目由作者独立开发,时间在下班后、周六天等。具体什么时候能发布 1.0.0 版本不好说,需要看实际的开发情况


根据目前的想法,美团技术文章中支持的特性,DTP(Dynamic Thread Pool)项目都会兼容进去,可能部分会因为作者技术有限,无法兼容

比如:

  • 修改阻塞队列长度

  • 修改线程池核心线程数、最大线程数、线程存活时长...

  • 线程池详细信息监控

  • 线程池负载报警

  • ...


项目不会强依赖某个不通用的中间件,对于小体量的工程,越是轻便越会有人想要去了解以及使用



本地部署

目前动态线程池功能已经完成,可以直接把代码拉到本地运行。项目中数据库是作者 ECS Docker 搭建,大家直接使用即可


  1. 启动 server 模块下 ServerApplication 启动类

  1. 启动 example 模块下 ExampleApplication 启动类

  1. 可以通过调用接口修改线程池配置。修改请求如下,请求时勿动 tenantId、itemId、tpId

POST http://localhost:6691/v1/cs/configs

{
    "tenantId": "common",
    "itemId": "message-center",
    "tpId": "custom-pool",
    "coreSize": 10,
    "maxSize": 15,
    "queueType": 9,
    "capacity": 9,
    "keepAliveTime": 100,
    "rejectedType": 7,
    "isAlarm": 2,
    "capacityAlarm": 80,
    "livenessAlarm": 80
}

接口调用成功后,观察 example 控制台日志输出,日志输出包括不限于此信息即为成功


Comments
  • 根据逻辑策略配置动态更新线程池参数

    根据逻辑策略配置动态更新线程池参数

    业务背景:一天中,某几个时间点会出现数据激增的情况。数据量 10w-100W不等,时间点不固定。 需求:期望可以通过代码中配置的策略,动态更新当前项目的线程池参数(无需重启项目)。 解决方案:

    • 通过Nacos、Apollo 调整配置文件,借助 Nacos、Apollo监听器实现线程池参数的动态更新。缺点:多个项目引用同一份配置文件的话,修改配置中心,其他项目也会修改(即一改全改)。
    • 通过SpringBoot 配置的动态更新,只调整当前项目的线程池参数。(需确认hip 是否存在快捷入口,不存在的话就需要自己封装。待验证)
    type: question in: hippo4j-config 
    opened by alexhaoxuan 34
  • DynamicThreadPoolExecutor 重构扩展逻辑

    DynamicThreadPoolExecutor 重构扩展逻辑

    我在读源码的时候,发现 DynamicThreadPoolExecutor 通过 ThreadPoolExecutor 提供的 executebeforeExecuteafterExecute 方法已经提供好了回调的钩子了,而也已经有关于开始时间和结束时间的处理逻辑了,如果要加上这个这三个时间指标的需求,直接在 DynamicThreadPoolExecutor 类里加上刷新时间的逻辑就可以。

    不过,个人觉得直接往上加代码或许不是一个优雅的解决方案,我注意到目前 DynamicThreadPoolExecutor 中已经写入了多种固定的回调逻辑:

    • AbstractDynamicExecutorSupport 父类提供的线程池中断时等待执行剩余任务的逻辑;
    • RejectedProxyInvocationHandler 提供的当触发拒绝策略时,通过 ThreadPoolNotifyAlarmHandler 发送告警的逻辑;
    • RejectedProxyInvocationHandler 提供的记录拒绝任务数的逻辑;
    • TaskDecorator 提供的在执行任务前对 Runable 进行包装的逻辑;
    • ThreadPoolNotifyAlarmHandler 提供的在任务执行后检测任务执行是否超时,并发生告警的逻辑;

    这些操作被直接固定在 DynamicThreadPoolExecutor,当需要进行扩展的时候——比如现在——往往需要直接修改 DynamicThreadPoolExecutor 类本身。

    出于更好的管理回调方法,与对 DynamicThreadPoolExecutor 本身避免耦合过多功能的方面考虑,是否通过提供类似 SpringAware 接口,或是 PostProcessor,来统一的向 DynamicThreadPoolExecutor 各个执行阶段设置回调方法呢?

    比如,我们可以在 DynamicThreadPoolExecutor 中设置这样几个回调节点,它们分别对应三个 Aware 接口里面的五个方法:

    • ExecuteAware:提供三个方法,可以在任务执行前、执行时、执行后触发回调;
    • RejectedAware:提供一个方法,在拒绝策略执行前回调;
    • ShutdownAware:提供一个方法,在线程池停止前回调;

    基于该想法,DynamicThreadPoolExecutor 本身可以简化为一个具备注册和管理 Aware 接口的纯净类,而各项扩展功能都可以以 XXXAwareHandler 的方式挂载到这个核心类上。

    比如:

    • 执行前包装任务的逻辑可以分离为 TaskDecoratorExecuteAwareHandler

    • 任务拒绝时告警的逻辑可以分离为 NotifyAlarmRejectedAwareHandler

    • 关闭线程池前等待执行剩余任务的逻辑可以分离为 TerminationShutdownAwareHandler

    • 记录线程执行时间的逻辑可以分离为 TimeWatchExecuteAwareHandler

      而根据执行时间选择是否发生超时告警的逻辑则可以基于前者扩展为 NotifiableTimeWatchExecuteAwareHandler

    若有必要,用户也可以根据需要比较方便的自行挂载新的 Aware 处理器。

    Originally posted by @Createsequence in https://github.com/opengoofy/hippo4j/issues/689#issuecomment-1286637407

    type: refactor good pro issue in: hippo4j-all 
    opened by Createsequence 12
  • Nacos 刷新失败

    Nacos 刷新失败

    Bug Report

    在开始报告错误之前,请确保认真查看了以下步骤:

    请在提交问题之前回答这些问题,谢谢。

    你使用了哪个项目?Hippo-4J Server 还是 Hippo-4J Core?

    Hippo-4J Core

    你使用了哪个版本?

    1.2.1

    预期行为

    修改nacos线程参数,线程池参数实时刷新

    实际行为

    线程池参数一直为启动时nacos上获取到的

    修改时的日志 o.s.cloud.commons.util.InetUtils : Cannot determine local hostname o.s.c.e.event.RefreshEventListener : Refresh keys changed: [spring.dynamic.thread-pool.executors[0].maximum-pool-size, spring.dynamic.thread-pool.executors[0].core-pool-size]

    原因分析(如果可以)

    问题重现步骤

    springboot 2.6.8 springcloud alibaba 2021.0.1.0 nacos 2.0.2

    用于重现此问题的示例代码(例如 GitHub 链接)

    https://github.com/lhzsdnu/example-hippo4j

    type: question 
    opened by lhzsdnu 11
  • TTL 装饰的线程池无法执行等待任务完成插件

    TTL 装饰的线程池无法执行等待任务完成插件

    创建线程池代码如下:

    @Slf4j
    @Configuration
    public class DynamicThreadPoolConfig {
    
        @Bean
        @DynamicThreadPool
        public Executor messageConsumeTtlDynamicThreadPool() {
            String threadPoolId = MESSAGE_CONSUME;
            ThreadPoolExecutor customExecutor = ThreadPoolBuilder.builder()
                    .dynamicPool()
                    .threadFactory(threadPoolId)
                    .threadPoolId(threadPoolId)
                    .build();
            // Ali ttl adaptation use case.
            Executor ttlExecutor = TtlExecutors.getTtlExecutor(customExecutor);
            return ttlExecutor;
        }
    }
    

    该代码只是把 TTL 对应的 TtlExecutors.getTtlExecutor 创建为 SpringBean,内部的动态线程池并没有注册为 SpringBean,导致无法执行等待任务完成插件。

    修改建议:

    将 TTL 内部持有的动态线程池对象注册为 SpringBean。

    type: bug 
    opened by pirme 10
  • refactor the function extension logic of DynamicThreadPoolExecutor (#815)

    refactor the function extension logic of DynamicThreadPoolExecutor (#815)

    完成 ISSUES #815 。

    主要内容如下:

    • 添加了插件接口 ThreadPoolPlugin ,插件管理器 ThreadPoolManager,以及支持使用借助插件接口对特定操作点进行扩展的线程池实现 ExtensibleThreadPoolExecutor
    • DynamicThreadPoolExecutor 进行了重构,另其不再继承 AbstractDynamicExecutorSupport ,而是继承 ExtensibleThreadPoolExecutor,并将其原有的扩展功能抽离为默认注册的插件,以便不影响其原有的 API;

    插件接口

    本次重构引入的插件机制,本质上是一套类似 Spring 的 Aware 或者 PostProcessor ,又或者 mybatis 的 Interceptor 这样的回调接口体系。

    扩展的线程池 ExtensibleThreadPoolExecutor 重写了 ThreadPoolExecutor 的一些方法,在这些方法执行前后会回调对应类型的回调接口中的方法,从而允许用户通过向线程池注册回调接口——也就是所谓的插件——的方式植入所需的逻辑。

    目前支持的扩展点有四种:

    • TaskAwarePlugin:提供在 CallableRunable 任务提交到线程池前调用,可以用它来包装或者替换提交进线程池的任务:

      1. beforeTaskSubmit():在通过 ThreadPoolExecutor.submit 方法提交CallableRunable 后, taskFor 创建任务前调用;
      2. beforeTaskExecute():在通过 ExecuteService.execute 方法提交 Runable 任务前调用;
    • ExecuteAwarePlugin:在线程池中的线程执行前后调用,提供两个方法:

      1. beforeExecute():任务执行前调用;
      2. afterExecute():任务执行后调用;
    • ShutdownAwarePlugin:当线程池调用 shutdown 或者 shutdownNow 前后,以及线程池终止的时候调用,提供三个方法:

      1. beforeShutdown():调用 shutdown() 或者 shutdownNow() 前调用;
      2. afterShutdown():调用 shutdown() 或者 shutdownNow() 后调用;
      3. afterTerminated():线程池终止后调用;
    • RejectAwarePlugin:提供 beforeRejectedExecution() 一个方法,当触发拒绝策略后,在调用策略的 RejectExecuteHandler.rejectedExecution() 方法前调用;

    执行流程

    在线程池创建时,每个 ExtensibleThreadPoolExecutor 都会先创建一个插件管理器 ThreadPoolPluginManager 并绑定,用于对注册到线程池中插件进行管理。

    当提交任务后,线程池在进行每一步支持回调的操作前,都会向插件管理器申请实现了与扩展点对应接口的插件,并调用插件方法,插件本身可以是单例也可以是多例的,因此也可以通过插件进一步了解单个或多个线程池的一些状态信息。

    img

    举个例子,如果我们希望能够有个插件能够记录线程池任务异常任务数量,可以这么做:

    // 1、创建插件类,实现ExecuteAwarePlugin接口,重写afterExecute方法
    @Getter
    public class FailTaskCountRecordPlugin implements ExecuteAwarePlugin {
        private final AtomicInteger failCount = new AtomicInteger(0);
        private final String id = "TestExecuteAwarePlugin";
        @Override
        public void afterExecute(Runnable runnable, Throwable throwable) {
            if (Objects.nonNull(throwable)) {
                failCount.incrementAndGet();
            }
        }
    }
    
    // 2、注册到线程池
    FailTaskCountRecordPlugin plugin = new FailTaskCountRecordPlugin();
    executor.register(plugin);
    executor.execute(() -> {throw new IllegalArgumentException("???");});
    executor.execute(() -> {throw new IllegalArgumentException("???");});
    ThreadUtil.sleep(50L);
    
    // 3、获取插件实例,并得到数据
    plugin = executor.getPluginOfType("TestExecuteAwarePlugin", FailTaskCountRecordPlugin.class).orElse(null);
    plugin.getFailCount().get(); // = 2
    

    功能分离

    本次重构基于上述机制,将原有 DynamicThreadPoolExecutor 的一些默认功能也抽离为插件:

    • TaskDecoratorPlugin:在提交任务前,对任务进行装饰;
    • TaskRejectCountRecordPlugin:记录线程池拒绝任务数;
    • TaskTimeRecordPlugin:记录线程池任务的最大、最小、总体执行时间;
    • TaskTimeoutNotifyAlarmPlugin:当任务执行超时时进行告警;
    • ThreadPoolExecutorShutdownPlugin:在线程池关闭后,等待线程池在指定时间内完成任务;

    DynamicThreadPoolExecutor 作为 ExtensibleThreadPoolExecutor 的子类,创建时会默认注册上述插件,并且仍然支持以原有的 API 访问和设置上述功能的相关信息及配置。

    opened by Createsequence 10
  • 客户端与 Hippo4j revision 冲突

    客户端与 Hippo4j revision 冲突

    opened by HuangDayu 9
  • 项目启动报错

    项目启动报错

    spring-boot版本

    <version>2.4.2</version>
    

    引用jar

    <dependency>
        <groupId>cn.hippo4j</groupId>
        <artifactId>hippo4j-config-spring-boot-starter</artifactId>
        <version>1.4.1</version>
    </dependency>
    

    启动报错

    [ ERROR] [main] [2022-10-24 14:13:45.136]-[TID: N/A] org.springframework.boot.SpringApplication -Application run failed
    java.lang.IllegalStateException: Failed to introspect Class [cn.hippo4j.config.springboot.starter.refresher.event.AbstractRefreshListener] from ClassLoader [sun.misc.Launcher$AppClassLoader@18b4aac2]
    	at org.springframework.util.ReflectionUtils.getDeclaredFields(ReflectionUtils.java:737)
    	at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:702)
    	at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:687)
    	at org.apache.dubbo.config.spring.beans.factory.annotation.AbstractAnnotationBeanPostProcessor.findFieldAnnotationMetadata(AbstractAnnotationBeanPostProcessor.java:168)
    	at org.apache.dubbo.config.spring.beans.factory.annotation.AbstractAnnotationBeanPostProcessor.buildAnnotatedMetadata(AbstractAnnotationBeanPostProcessor.java:242)
    	at org.apache.dubbo.config.spring.beans.factory.annotation.AbstractAnnotationBeanPostProcessor.findInjectionMetadata(AbstractAnnotationBeanPostProcessor.java:261)
    	at org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor.postProcessBeanFactory(ReferenceAnnotationBeanPostProcessor.java:153)
    	at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:299)
    	at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:178)
    	at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:751)
    	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:569)
    	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144)
    	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:767)
    	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759)
    	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:426)
    	at org.springframework.boot.SpringApplication.run(SpringApplication.java:326)
    	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1311)
    	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1300)
    	at com.bananain.wm.ServiceApplication.main(ServiceApplication.java:23)
    Caused by: java.lang.NoClassDefFoundError: Lcn/hippo4j/common/model/WebIpAndPortInfo;
    	at java.lang.Class.getDeclaredFields0(Native Method)
    	at java.lang.Class.privateGetDeclaredFields(Class.java:2583)
    	at java.lang.Class.getDeclaredFields(Class.java:1916)
    	at org.springframework.util.ReflectionUtils.getDeclaredFields(ReflectionUtils.java:732)
    	... 18 common frames omitted
    Caused by: java.lang.ClassNotFoundException: cn.hippo4j.common.model.WebIpAndPortInfo
    	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    	... 22 common frames omitted
    [ INFO ] [main] [2022-10-24 14:13:45.137]-[TID: N/A] org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor -class org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor was destroying!
    [ WARN ] [Thread-8] [2022-10-24 14:13:45.139]-[TID: N/A] com.alibaba.nacos.common.notify.NotifyCenter -[NotifyCenter] Start destroying Publisher
    [ WARN ] [Thread-3] [2022-10-24 14:13:45.139]-[TID: N/A] com.alibaba.nacos.common.http.HttpClientBeanHolder -[HttpClientBeanHolder] Start destroying common HttpClient
    [ WARN ] [Thread-8] [2022-10-24 14:13:45.139]-[TID: N/A] com.alibaba.nacos.common.notify.NotifyCenter -[NotifyCenter] Destruction of the end
    [ WARN ] [Thread-3] [2022-10-24 14:13:45.141]-[TID: N/A] com.alibaba.nacos.common.http.HttpClientBeanHolder -[HttpClientBeanHolder] Destruction of the end
    
    Process finished with exit code 1
    
    type: question in: hippo4j-config 
    opened by luojiasheng 8
  • docker启动登录异常

    docker启动登录异常

    BUG 报告

    在开始报告错误之前,请确保认真查看了以下步骤:

    请在提交问题之前回答这些问题,谢谢。

    你使用了哪个项目?hippo4j config 还是 hippo4j server?

    你使用了哪个版本?

    预期行为

    实际行为

    docker启动 根据文档提供的启动命令,数据库已提前创建好,登录异常,login接口200 无任何返回信息, image image image image

    原因分析(如果可以)

    问题重现步骤

    用于重现此问题的示例代码(例如 GitHub 链接)

    status: invalid type: question 
    opened by laoxiaokang 8
  • 查看线程池信息报错

    查看线程池信息报错

    BUG 报告

    在开始报告错误之前,请确保认真查看了以下步骤:

    请在提交问题之前回答这些问题,谢谢。

    你使用了哪个项目?hippo4j config 还是 hippo4j server?

    hippo4j server

    你使用了哪个版本?

    docker hippo4j-server:1.4.2

    cn.hippo4j hippo4j-spring-boot-starter 1.4.2

    实际依赖

    image

    预期行为

    点击可以查看线程信息

    实际行为

    image

    对应异常信息

    java.lang.NoClassDefFoundError: Could not initialize class cn.hippo4j.common.toolkit.BeanUtil
            at cn.hippo4j.core.executor.state.ThreadPoolRunStateHandler.supplement(ThreadPoolRunStateHandler.java:79) ~[hippo4j-core-1.4.2.jar!/:1.4.2]
            at cn.hippo4j.core.executor.state.AbstractThreadPoolRuntime.getPoolRunState(AbstractThreadPoolRuntime.java:110) ~[hippo4j-core-1.4.2.jar!/:1.4.2]
            at cn.hippo4j.core.executor.state.AbstractThreadPoolRuntime.getPoolRunState(AbstractThreadPoolRuntime.java:54) ~[hippo4j-core-1.4.2.jar!/:1.4.2]
            at cn.hippo4j.springboot.starter.controller.WebThreadPoolRunStateController.getPoolRunState(WebThreadPoolRunStateController.java:48) ~[hippo4j-spring-boot-starter-1.4.2.jar!/:1.4.2]
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_332]
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_332]
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_332]
            at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_332]
            at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) ~[spring-web-5.2.12.RELEASE.jar!/:5.2.12.RELEASE]
            at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) ~[spring-web-5.2.12.RELEASE.jar!/:5.2.12.RELEASE]
            at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105) ~[spring-webmvc-5.2.12.RELEASE.jar!/:5.2.12.RELEASE]
            at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:878) ~[spring-webmvc-5.2.12.RELEASE.jar!/:5.2.12.RELEASE]
    
    

    原因分析(如果可以)

    问题重现步骤

    用于重现此问题的示例代码(例如 GitHub 链接)

    type: question 
    opened by Skqing 7
  • 适配线程池延迟初始化

    适配线程池延迟初始化

    需求建议

    hippo4j-spring-boot-start-example配置文件中加入spring.main.lazy-initialization=true 客户端clientwork 长轮训线程进入阻塞,并未被唤醒 image

    修改方式

    1. 框架加入一个继承CommandLineRunner的bean,项目启动后唤醒客户端长轮训线程,去除事件监听器逻辑,健康检查等相关逻辑同步修改。
    2. 进入长轮训判断取消。 2.1 因为客户端可能存在懒加载的bean,当map.isEmpty()时,依旧进入。 2.2 长轮训方法中加入判断逻辑,再加入一层唤醒机制,当本地注册的DynamicThreadPoolExecutor不为空时,取消睡眠

    如果认为这的确需要去适配,稍后我会去实现他。

    您的功能请求是否与问题有关?

    描述你想要的功能

    type: enhancement good pro issue in: hippo4j-server 
    opened by wulangcode 7
  • 支持 SpringBoot 2.0 以下版本动态修改线程池

    支持 SpringBoot 2.0 以下版本动态修改线程池

    依赖配置中心动态刷新线程池的 hippo4j-config 在进行动态刷新前,需要将配置中心的 Map 对象转换为具体的动态线程池配置对象。

    SpringBoot 2.0 +版本有个 org.springframework.boot.context.properties.bind.Binder 可以很好支持该需求,但是低于该版本却没有很好的支持方式。所以 hippo4j config 模式不支持 SpringBoot 2.0 以下版本。

    需求:hippo4j config 模式支持 SpringBoot 2.0 以下版本。

    具体方法:

    • BootstrapConfigPropertiesBinderAdapt.bootstrapCorePropertiesBinder
    type: enhancement good pro issue in: hippo4j-config 
    opened by mageeric 7
  • 个人建议,加入定时调整线程池参数功能

    个人建议,加入定时调整线程池参数功能

    需求建议

    建议加入定时调整线程池参数功能。

    您的功能请求是否与问题有关?

    描述你想要的功能

    需求场景如下: 公司在某个时间段(比如早上9点30 ~ 11点30)业务量大,业务代码暂无法优化的情况下通过手动调整线程池参数,这样每天的工作会变得重复(虽然动动指头可能花3分钟左右时间手动调整)。可以新增定时任务功能,使用者设定好定时频率和对应的参数,到点自动执行,这样在无人值守的时候会有很大的用处。

    望采纳,谢谢~

    opened by ganyufei88 0
  • 线程池参数默认配置与文档描述不符

    线程池参数默认配置与文档描述不符

    需求建议

    image

    部分配置文件:

    spring.dynamic.thread-pool.default-executor.keep-alive-time=1200
    spring.dynamic.thread-pool.executors[0].core-pool-size=16
    spring.dynamic.thread-pool.executors[0].maximum-pool-size=16
    spring.dynamic.thread-pool.executors[0].thread-pool-id=wechat
    spring.dynamic.thread-pool.executors[0].queue-capacity=1000
    

    期望结果是填充wechatkeep-alive-time参数值为1200。 实际结果: image image

    如果认为这是问题,请指派给我。

    type: bug 
    opened by wulangcode 1
  • 无法读取Apollo配置

    无法读取Apollo配置

    BUG 报告

    在开始报告错误之前,请确保认真查看了以下步骤:

    请在提交问题之前回答这些问题,谢谢。

    你使用了哪个项目?

    hippo4j config

    你使用了哪个版本?

    1.4.3-upgrade

    预期行为

    获取Apollo的配置信息

    实际行为

    无法获取Apollo的配置信息,直接以代码层面的配置

    原因分析(如果可以)

    问题重现步骤

    Apollo进行配置,然后初始化。使用线程池进行数据提交,提交533后,被拒绝

    用于重现此问题的示例代码(例如 GitHub 链接)

    Apollo配置

    
    spring.dynamic.thread-pool.notify-platforms[0].platform = DING
    spring.dynamic.thread-pool.notify-platforms[0].secret = 
    spring.dynamic.thread-pool.notify-platforms[0].token = 
    spring.dynamic.thread-pool.alarm = false
    spring.dynamic.thread-pool.enable = true
    spring.dynamic.thread-pool.apollo.namespace = application
    spring.dynamic.thread-pool.config-file-type = properties
    spring.dynamic.thread-pool.collect = false
    spring.dynamic.thread-pool.executors[0].thread-pool-id = test-request
    spring.dynamic.thread-pool.executors[0].core-pool-size = 5
    spring.dynamic.thread-pool.executors[0].maximum-pool-size = 15
    spring.dynamic.thread-pool.executors[0].blocking-queue = 'LinkedBlockingQueue'
    spring.dynamic.thread-pool.executors[0].queue-capacity = 3048
    spring.dynamic.thread-pool.executors[0].capacity = 3048
    spring.dynamic.thread-pool.executors[0].execute-time-out = 10000
    spring.dynamic.thread-pool.executors[0].keep-alive-time = 60
    spring.dynamic.thread-pool.executors[0].allow-core-thread-time-out = false
    spring.dynamic.thread-pool.executors[0].rejected-handler = 'AbortPolicy'
    spring.dynamic.thread-pool.executors[0].thread-name-prefix = test-request
    spring.dynamic.thread-pool.executors[0].alarm = false
    

    初始化线程池

    
    @Bean
        @DynamicThreadPool
        public ExecutorService weatherRequestExecutor(BeanFactory beanFactory) {
            String threadPoolId = "test-request";
            // @formatter:off
            ThreadPoolExecutor messageConsumeDynamicExecutor = ThreadPoolBuilder.builder()
                    .corePoolSize(10)
                    .maxPoolNum(20)
                    .workQueue(RESIZABLE_LINKED_BLOCKING_QUEUE)
                    .keepAliveTime(60L)
                    .threadFactory(threadPoolId)
                    .threadPoolId(threadPoolId)
                    .dynamicPool()
                    .build();
            // @formatter:on
    
            return new TraceableExecutorService(beanFactory, messageConsumeDynamicExecutor);
        }
    
    type: question 
    opened by ZHBlue5 3
  • Refactor : generic type custom BlockingQueue support

    Refactor : generic type custom BlockingQueue support

    Fixes #1035

    Changes proposed in this pull request:

    CustomBlockingQueue is used to create custom BlockingQueue. BlockingQueue is a container in essence. So Add generic type to support parameterized type.

    opened by lianyiwuming 1
  • add CustomBlockingQueue generic type support

    add CustomBlockingQueue generic type support

    需求建议

    CustomBlockingQueue is used to create custom BlockingQueue. BlockingQueue is a container in essence. So mybe add generic type to support parameterized type.

    您的功能请求是否与问题有关?

    not yet. It's a optimize.

    描述你想要的功能

    I will add a pr. pls notice!

    image

    opened by lianyiwuming 0
Releases(v1.4.3)
  • v1.4.3(Nov 6, 2022)

    这是一个功能增强版本,修复了少量 BUG。建议按照当前版本升级。具体信息可查看 Release 标签地址:1.4.3

    Use Change

    • 重构线程池监控,配置层级和命名改变
    • 如果使用钉钉报警,关键字【警报】修改为【告警】

    Feature

    • 重构 Spring 后置处理器创建动态线程池逻辑
    • 官网开启多版本化功能
    • 官网支持国际化,en-US
    • 适配线程池延迟初始化 @wulangcode
    • 添加 Codecov 相关代码覆盖率指标
    • 项目优雅关闭时停止运行状态采集

    Refactor

    • DynamicThreadPoolExecutor 重构,增加插件扩展逻辑 @Createsequence
    • 重构线程池监控,新增容器和三方框架线程池监控
    • 重构服务端包目录,聚合 hippo4j-server 相关 module

    Bug

    • dubbo 线程池无法获取运行信息 @iwangjie
    • 线程池检查活跃度报警取值错误 @maxisvest
    • 动态线程池修改多次后队列提示信息丢失
    • docker部署 mysql启动报错H2驱动
    • docker-startup.sh的mysql配置多个“-” @Malcolmli
    • 动态注册线程池队列容量赋值错误
    • 飞书超时类型告警不存在 Trace 信息时发送错误 @mageeric

    Optimize

    • 修改报警文案,【警报】修改为【告警】 @wulangcode
    • 自动选择H2数据库的存储路径 @iwangjie
    • 服务端在客户端后面启动,依旧支持长轮训 @wulangcode
    • 配置未发生变更时,长轮询返回 304 @wulangcode
    • discovery服务Lease类中判断过期时间需要多等一个duration @w-jirong
    • 优化 ThreadPoolBuilder#maxPoolNum 核心线程不得大于最大线程 @wulangcode
    • hippo4j console ui 迁移至本项目
    • 查询 Web 线程池列表添加框架标识
    • 优化 H2 初始化逻辑
    Source code(tar.gz)
    Source code(zip)
    hippo4j-server-1.4.3.tar.gz(35.58 MB)
    hippo4j-server-1.4.3.zip(35.54 MB)
  • v1.4.2(Oct 17, 2022)

    这是一个功能增强版本,修复了少量 BUG。建议按照当前版本升级。具体信息可查看 Release 标签地址:1.4.2

    Feature

    • 强制指定客户端注册的 ip + port
    • 支持 spring-cloud-tencent Polaris 线程池动态更新 @weihubeats
    • 服务启动时加载 MySQL、H2 数据库初始化语句
    • Adapter 初始化覆盖核心参数 @pizihao
    • Server 端新增是否开启认证模式 @baymax55

    Refactor

    • 替换底层网络工具类 OkHttp @yanrongzhen
    • 全局移除 commons-lang3 工具包依赖 @yanrongzhen
    • 去除三方工具类依赖 @pizihao
    • 全局移除 Guava 工具包依赖 @road2master
    • DockerFile 基于 H2 数据库重新构建 @BigXin0109

    Bug

    • Dubbo 2.7.15 无法获取线程池引用 @iwangjie
    • 动态线程池报警参数颠倒 @jinlingmei

    Optimize

    • 线程池实例运行数据采集,如果线程池id不存在,且长度超长,会报异常 @Gdk666
    • 项目中动态线程池数量为空时,存在 CPU 空转情况
    • 客户端注册服务端失败,输出服务端返回信息 @wulangcode
    • 调整数据库项目 id 和线程池 id 字段长度
    • 增加代码检查工具 maven-checkstyle-plugin
    • 调整控制台监控图表颜色展示
    Source code(tar.gz)
    Source code(zip)
    hippo4j-server-1.4.2.tar.gz(35.60 MB)
    hippo4j-server-1.4.2.zip(35.56 MB)
  • v1.4.1(Sep 11, 2022)

    这是一个功能增强版本,修复了若干 BUG。建议按照当前版本升级。具体信息可查看 Release 标签地址:1.4.1

    Feature

    • 支持 H2 数据库 @weihubeats
    • 动态线程池配置变更时,支持单个、多个或全部节点变 @pizihao
    • 增加线程池活跃度和容量报警可选择关闭
    • @DynamicThreadPool 线程池不存在则创建 @shanjianq
    • 支持 ETCD 配置中心动态调整参数 @weihubeats
    • 创建动态线程池支持 spring 线程池 @BigXin0109
    • 线程池实例变更增加执行超时时间
    • 线程池相关查询页面增加阻塞队列属性
    • 定义动态线程池时,抽象默认配置
    • 提供 ExecutorContext 封装上下文细节 @road2master
    • Docker 制作服务端镜像,帮助开发者快速启动 @BigXin0109
    • RabbitMQ 适配器增加多个 MQ 数据源 @weihubeats

    Bug

    • 动态线程池设置关闭时启动报错 @dousp
    • ExecutorTtlWrapper 类型的 Executor 不生效 @BigXin0109
    • Undertow 获取 WebServer 类型参数异常 @shining-stars-lk
    • 修复线程池核心、最大线程数校验限制
    • ByteConvertUtil#getPrintSize 单位转换错误 @onesimplecoder
    • 创建线程池单选框选择错误
    • ReflectUtil#getFieldsDirectly missing fields @BigXin0109
    • 本地代码中设置的 capacity 无效 @BigXin0109
    • 服务端线程池超时时间存在拆箱空指针异常 @oreoft
    • 未读取服务端返回执行超时时间属性
    • ResizableCapacityLinkedBlockingQueue#put 当前元素数量大于 capacity 未阻塞

    Optimize

    • 长轮询任务判断逻辑优化 @shining-stars-lk
    • 线程池存在实例不允许删除线程池 @shanjianq
    • 优化租户、项目列表展示排版
    • 通知报警模块项目和线程池下拉查询排序修改
    • 动态线程池拒绝策略触发,以异步的方式报警
    • 优化框架中线程池工厂产生的线程名称 @road2master

    联系我

    扫码添加微信,备注:hippo4j,邀您加入群聊。若图片加载不出来,访问 官网站点

    Source code(tar.gz)
    Source code(zip)
    hippo4j-server-1.4.1.tar.gz(38.86 MB)
    hippo4j-server-1.4.1.zip(38.82 MB)
  • v1.4.0(Aug 16, 2022)

    hippo4j server 兼容历史低版本,hippo4j config 中部分属性名进行了调整,请参考 hippo4j config 快速开始

    注意事项:

    1. 如果是对已运行 hippo4j server 升级,执行 /conf/sql-upgrade 目录下对应的升级脚本。
    2. 需客户端在 1.4.0 及以上版本才可在 hippo4j server 设置线程执行超时时间属性。

    Feature

    1. [#492] 添加 Alibaba Dubbo 线程池监控及动态变更
    2. [#527] hippo4j server 支持任务执行超时时间动态修改
    3. [#506] 阿里 TTL 框架线程池适配
    4. [#237] 添加动态线程池自动注册功能
    5. [#475] 订阅回调线程池参数变更
    6. [#455] 动态线程池监控增加 SPI 自定义功能
    7. [#386] hippo4j server 支持多种线程池监控方式,例如 Prometheus
    8. [#407] 通知相关参数添加动态变更功能

    Bug

    1. [#405] 线程池变更:executeTimeOut 变更极端情况下会出现异常
    2. [#272] 用户登录时候,如果输入了不存在的用户名,后台报空指针异常
    3. [#341] 修复了对 spring-boot 服务中 tomcat 线程池的兼容问题
    4. [#349] 排除 Tomcat Jar 使用 Undertow 启动报错

    Optimize

    1. [#532] hippo4j-core-spring-boot-starter 模块修改名称为 hippo4j-config-spring-boot-starter
    2. [#524] 拆分容器线程池子页面:Tomcat、Undertow、Jetty
    3. [#252] 服务端访问客户端时对 URL 转码
    4. [#501] MyBatisPlus 修改全局填充方法优化
    5. [#472] 控制台线程池列表下拉框默认正序
    6. [#448] 控制台线程池实例菜单,对于非可修改容量队列外,不允许修改队列容量
    7. [#447] 动态线程池控制台功能变更
    8. [#426] 租户和项目列表分页查询按照创建时间倒序展示
    9. [#358] 线程池监控页面图表 UI 优化
    10. [#410] 设置 maven-gpg-plugin 插件默认不执行
    11. [#408] 前端控制台相关搜索条件添加必填提示
    12. [#373] hippo4j 消息通知 & 报警抽象优化
    13. [#399] 配置中心未配置线程池启动报错
    14. [#375] 控制台线程池报警 UI 以及功能优化
    15. [#384] Web、框架线程池编辑弹框 UI 优化
    16. [#380] 线程池添加、编辑页面 UI 优化
    17. [#357] 线程池运行详情页前端 UI 优化

    Refactor

    1. [#460] 删除自定义日志组件
    2. [#361] 线程池监控功能重构
    3. [#374] hippo4j core 配置中心生效判断重构
    4. [#360] 配置变更通知 & 报警通知重构
    5. [#308] Web 容器线程池适配迁移 hippo4j-adapter
    Source code(tar.gz)
    Source code(zip)
    hippo4j-server-1.4.0.tar.gz(36.75 MB)
    hippo4j-server-1.4.0.zip(36.71 MB)
  • v1.3.1(Jul 17, 2022)

    注:这是一个兼容历史版本的小范围升级。

    Feature

    • 控制台新增线程池功能设置为 Admin 权限
    • 添加 Hystrix 线程池监控及动态变更
    • 添加 Netty 上传动态线程池监控数据方式
    • 添加 GitHub Actions CI 流程
    • 添加 Spring Kafka 示例项目
    • Tomcat 版本号 >= 9.0.55 线程池适配

    Refactor

    • 更多线程池拆分子目录页面

    Optimize

    • hippo4j core 添加 banner 打印
    • 优化可变更容量阻塞队列名称

    BUG

    • Apollo 配置修改延迟了一个版本
    • Spring Boot 环境下使用 hippo4j-core 接入,配置中心使用 nacos;启动时提示 ConfigService not found

    查看 1.3.1 版本发布:https://github.com/mabaiwan/hippo4j/milestone/9

    Source code(tar.gz)
    Source code(zip)
    hippo4j-server-1.3.1.tar.gz(39.04 MB)
    hippo4j-server-1.3.1.zip(39.00 MB)
  • v1.3.0(Jun 7, 2022)

    1.3.0 发布 适配三方框架的基础框架

    目前已完成 Dubbo、RabbitMQ、RocketMQ、RocketMQSpringCloudStream 的线程池适配,后续还会接入 Kafka、Hystrix 等框架或中间件的线程池适配。

    注:这是一个兼容历史版本的重大升级。

    Feature

    1. 添加 RabbitMQ 线程池监控及动态变更
    2. 添加 RocketMQ 线程池监控及动态变更
    3. 添加 Dubbo 线程池监控及动态变更
    4. 添加 SpringCloud Stream RocketMQ 消费线程池监控及动态变更

    Refactor

    1. 重构容器线程池查询及修改功能
    2. 优化配置中心触发监听后,所执行的数据变更逻辑

    Optimize

    1. 前端控制台删除无用组件
    2. 服务端页面字段未显示中文
    3. 控制台 UI 优化
    4. 修改线程池实例后实时刷新列表参数
    5. 容器线程池编辑仅限 Admin 权限
    6. SpringBoot Starter 变更包路径

    BUG

    1. 修复 SpringBoot Nacos 动态刷新不生效
    2. 报警配置 alarm=false 不配置通知报警平台和接收人报错

    Link

    官网:https://hippo4j.cn/ 加群沟通:https://github.com/longtai-cn/hippo4j/issues/9

    查看 1.3.0 issue:https://github.com/mabaiwan/hippo4j/milestone/8?closed=1

    Source code(tar.gz)
    Source code(zip)
    hippo4j-server-1.3.0.tar.gz(35.93 MB)
    hippo4j-server-1.3.0.zip(35.89 MB)
  • v1.2.1(May 7, 2022)

    hippo4j core & server 1.2.0 可平滑升级。

    BugFix

    • https://github.com/longtai-cn/hippo4j/issues/162 apollo动态配置不生效
    • https://github.com/longtai-cn/hippo4j/pull/172 修复 hippo4j-core 后置处理器创建线程池问题
    • https://github.com/longtai-cn/hippo4j/issues/177 重构 hippo4j-core spring 后置处理器逻辑
    • https://github.com/longtai-cn/hippo4j/issues/188 优化ThreadPoolNotifyAlarmHandler下的空指针异常
    • https://github.com/longtai-cn/hippo4j/issues/190 修复线程池核心、最大线程数变更问题
    • https://github.com/longtai-cn/hippo4j/issues/210 startup.cmd 未正常读取 conf 配置文件

    Optimize

    • https://github.com/longtai-cn/hippo4j/issues/166 配置文件中字段歧义
    • https://github.com/longtai-cn/hippo4j/issues/173 修改代码中历史网址
    • https://github.com/longtai-cn/hippo4j/issues/181 InstanceInfo 的 groupKey 参数重复设置
    • https://github.com/longtai-cn/hippo4j/issues/193 ConfigFileTypeEnum 枚举字段添加注释
    • https://github.com/longtai-cn/hippo4j/issues/194 线程资源通过线程池创建,不允许自行显示创建线程
    • https://github.com/longtai-cn/hippo4j/issues/195 Guava 版本升级至 30.0-jre 及以上版本
    • https://github.com/longtai-cn/hippo4j/issues/204 SystemClock 替换 System.currentTimeMillis()
    • https://github.com/longtai-cn/hippo4j/issues/205 添加代码格式化插件 Spotless
    • https://github.com/longtai-cn/hippo4j/issues/214 修改线程池文案

    Link

    官网:https://hippo4j.cn/ 加群沟通:https://github.com/longtai-cn/hippo4j/issues/9

    Source code(tar.gz)
    Source code(zip)
    hippo4j-server-1.2.1.tar.gz(35.91 MB)
    hippo4j-server-1.2.1.zip(35.86 MB)
  • v1.2.0(Mar 28, 2022)

    Feature

    • https://github.com/acmenlt/dynamic-threadpool/issues/96 hippo4j-core线程池资源对接 Prometheus 监控
    • https://github.com/acmenlt/dynamic-threadpool/issues/143 hippo4j-core 支持 Zookeeper
    • https://github.com/acmenlt/dynamic-threadpool/issues/115 hippo4j-core 支持 Apollo

    Optimize

    • https://github.com/acmenlt/dynamic-threadpool/issues/147 适配非 Web SpringBoot 项目使用 Hippo4J
    • https://github.com/acmenlt/dynamic-threadpool/issues/158 优化报警通知
    • https://github.com/acmenlt/dynamic-threadpool/issues/152 修复在 JDK 小版本中的兼容性问题

    BugFix

    • https://github.com/acmenlt/dynamic-threadpool/issues/148 server 端查看容器线程池,参数为 null
    • https://github.com/acmenlt/dynamic-threadpool/issues/149 重构线程池查看及容器线程池查看等交互
    • https://github.com/acmenlt/dynamic-threadpool/issues/151 修复引入 hippo4j-spring-boot-starter 后,运行单元测试报错
    • https://github.com/acmenlt/dynamic-threadpool/issues/155 修复可能出现的空指针异常

    Link

    官网:https://hippox.cn/ 加群沟通:https://github.com/acmenlt/dynamic-threadpool/issues/9

    Source code(tar.gz)
    Source code(zip)
    hippo4j-server-1.2.0.tar.gz(35.56 MB)
    hippo4j-server-1.2.0.zip(35.52 MB)
  • v1.1.0(Mar 13, 2022)

    Hippo4J 线程池框架 1.1.0 RELEASE 版本,添加了 Hippo4J-Core(依赖配置中心的动态线程池).

    Feature

    • [#99] 删除 DynamicThreadPoolExecutor 内代码实现,仅通过线程池扩展点进行扩展
    • [#101] 通过动态代理实现线程池拒绝策略执行次数统计
    • [#102] 抽象通知报警消息模块
    • [#103] 抽象 hippo4j 核心组件,不依赖 server 端即可完成动态调参、监控、报警等功能
    • [#107] 前端删除线程池按钮添加 Admin 权限
    • [#112] 添加线程池任务运行超长报警
    • [#113] 容器线程池支持 Undertow
    • [#114] 容器线程池支持 Jetty
    • [#124] 重构服务端异常体系

    Optimize

    • [#77] 前端项目 Token 失效跳转登录页
    • [#92] 优化 Server 启动脚本日志输出
    • [#118] 优化前端按钮权限控制粒度
    • [#129] 优化线程池报警推送文案
    • [#134] 前端弹框样式优化
    • [#136] 适配低版本 SpringBoot Bind
    • [#138] 优化消息通知模块

    BugFix

    • [#109] Duplicate entry 'xxx' for key 'uk_configinfo_datagrouptenant'

    Link

    官网:https://hippox.cn 加群沟通:https://github.com/acmenlt/dynamic-threadpool/issues/9

    Source code(tar.gz)
    Source code(zip)
    hippo4j-server-1.1.0.tar.gz(34.37 MB)
    hippo4j-server-1.1.0.zip(34.33 MB)
  • v1.0.0(Feb 1, 2022)

    Hippo4J 线程池框架 1.0.0 RELEASE 版本.

    Feature

    • [#23] 线程池运行堆栈查看
    • [#68] 扩展 Web 容器线程池动态调参、监控

    Optimize

    • [#63] 删除高版本 SpringBoot Api
    • [#64] ListableBeanFactory#findAnnotationOnBean SpringBoot 低版本适配
    • [#65] 优化客户端关闭时调用服务端钩子函数
    • [#67] 线程池实例参数弹框添加实例 ID 和线程池状态
    • [#70] 补充线程池替换 Hippo4J 文档
    • [#80] 1.5.x springboot 引入hippo4j-spring-boot-starter配置项,bean初始化失败
    • [#83] 优化线程池参数编辑合理性校验
    • [#91] BaseInstanceRegistry 读写锁重构

    BugFix

    • [#66] 本地项目线程池实例缓存无法精确清理
    • [#72] 线程池实例页面多实例不同 Active 展示错误
    • [#74] 创建动态线程池逻辑判断修复
    • [#78] 创建动态线程池增强参数未设置
    • [#82] 控制消息推送报警频率的方法有并发安全的问题
    • [#86] tomcat线程池上下文获取失败

    Link

    官网:https://hippox.cn 加群沟通:https://github.com/acmenlt/dynamic-threadpool/issues/9

    Source code(tar.gz)
    Source code(zip)
    hippo4j-server-1.0.0.tar.gz(34.30 MB)
    hippo4j-server-1.0.0.zip(34.27 MB)
  • v1.0.0-beta(Jan 4, 2022)

    v1.0.0-alpha 的增强版,在此基础上进行 BUG 修复和功能增强.

    Feature

    • [#43] 通过配置文件设置是否启用动态线程池功能
    • [#49] 提供清理无效实例接口
    • [#54] 支持更多的拒绝策略类型
    • [#58] Web 控制台支持自定义线程池拒绝策略
    • [#61] 添加示例项目中自定义拒绝策略 SPI 实现

    Optimize

    • [#48] Spring 上下文无父类时无法通知问题
    • [#51] 优化 OKHttp 高版本依赖
    • [#53] 获取不到服务端自定义异常抛出
    • [#55] 线程池实例参数返回拒绝策略名称
    • [#57] 配置文件设置不启用时,跳过其它必填项校验

    BugFix

    • [#42] 客户端启动后,服务端 30 秒内无法搜索到实例
    • [#44] DiscoveryClient bean 冲突
    • [#45] 首页获取用户信息错误
    • [#46] 企业微信无法 @ 人员
    • [#47] 极端情况监听线程池变更请求会重复请求
    • [#50] 服务端当前用户记录错误

    Link

    官网:https://www.hippox.cn 加群沟通:https://www.hippox.cn/pages/dd137d

    Source code(tar.gz)
    Source code(zip)
    hippo4j-server-1.0.0-beta.5.tar.gz(34.31 MB)
    hippo4j-server-1.0.0-beta.5.zip(34.27 MB)
  • v1.0.0-alpha(Dec 24, 2021)

    1.0.0-alpha 版本,与即将发布的 1.0.0 功能不变,只做可能发现的 BUG 修复。

    Feature

    [#15] 线程池历史运行数据采集上报,服务端监控展示 [#31] 服务端新增修改操作时,判断是否包含敏感字符 [#33] 定期删除线程池历史运行数据 [#34] 客户端交互服务端需要用户名密码

    Refactor

    [#16] 优化订阅动态配置线程池 [#22] 优化客户端多实例集群部署,针对单实例线程池差异化配置 [#25] 提供 JSON Facade 模式,添加 Jackson 序列化 [#27] 服务端线程池历史数据存储支持自定义过期时间

    BugFix

    [#29] 客户端启动后第一次修改线程池参数错误 [#40] 修复 HttpClientUtil 中内存泄漏以及优化抛出异常

    Link

    官网:https://www.hippox.cn 加群沟通:https://www.hippox.cn/pages/dd137d

    Source code(tar.gz)
    Source code(zip)
    hippo4j-server-1.0.0-alpha.tar.gz(34.28 MB)
    hippo4j-server-1.0.0-alpha.zip(34.25 MB)
  • v0.9.0(Nov 30, 2021)

    这是 1.0.0 前的预发布版本,核心功能与 1.0.0 一致,正式版本可能进行细节优化。

    Feature

    1. Hippo4J 前端控制台
    2. 租户模块、项目、线程池、用户权限管理
    3. 线程池、租户、通知报警操作日志记录
    4. 线程池核心参数动态修改;集群部署情况下,支持节点配置隔离
    5. 线程池运行时参数查看,JVM 节点配置、线程池核心配置等
    6. 通知报警模块,线程池参数变更、运行时报警通知,已支持飞书、钉钉、企微

    Link

    官网:https://hippox.cn/zh-cn 文档:https://hippox.cn/zh-cn/docs/start/about.html

    Source code(tar.gz)
    Source code(zip)
    hippo4j-server-0.9.0.zip(34.78 MB)
  • v0.4.0(Oct 27, 2021)

    • 解决可变的阻塞队列在容量满时无法唤醒线程的问题
    • 删除并行流转换 Bean,解决多线程下集合不安全问题
    • 开发 log record 组件,实现操作日志打印
    • 消息通知 (变更配置、报警信息) 支持 @ 多人
    • 优化相关代码
    Source code(tar.gz)
    Source code(zip)
  • v0.3.0(Oct 11, 2021)

  • v0.2.0(Jul 11, 2021)

    • Server 端未启动时不影响 Client 使用
    • Server 端无法连接时,添加 Client 端休眠重试
    • 优化 CLient 端日志打印
    • 阻塞队列、拒绝策略 SPI 机制集成
    • 开发线程池运行时状态指标
    • 添加 Console 模块,分离控制层职责
    Source code(tar.gz)
    Source code(zip)
  • v0.1.0(Jul 4, 2021)

    • 提供可修改容量的阻塞队列
    • 动态修改线程池常用参数
    • 添加业务线、项目、线程池业务操作
    • 提供 Dynamic-ThreadPool Spring Boot Starter
    • 提供示例模块 Example
    Source code(tar.gz)
    Source code(zip)
Owner
龙台
微信公众号:龙台的技术笔记
龙台
Vibur DBCP - concurrent and dynamic JDBC connection pool

Vibur DBCP is concurrent, fast, and fully-featured JDBC connection pool, which provides advanced performance monitoring capabilities, including slow S

Vibur 94 Apr 20, 2022
Provides many useful CRUD, Pagination, Sorting operations with Thread-safe Singleton support through the native JDBC API.

BangMapleJDBCRepository Inspired by the JpaRepository of Spring framework which also provides many capabilities for the CRUD, Pagination and Sorting o

Ngô Nguyên Bằng 5 Apr 7, 2022
FlexyPool adds metrics and failover strategies to a given Connection Pool, allowing it to resize on demand.

Introduction The FlexyPool library adds metrics and flexible strategies to a given Connection Pool, allowing it to resize on demand. This is very hand

Vlad Mihalcea 970 Jan 1, 2023
光 HikariCP・A solid, high-performance, JDBC connection pool at last.

HikariCP It's Faster.Hi·ka·ri [hi·ka·'lē] (Origin: Japanese): light; ray. Fast, simple, reliable. HikariCP is a "zero-overhead" production ready JDBC

Brett Wooldridge 17.7k Jan 1, 2023
Time series monitoring and alerting platform.

Argus Argus is a time-series monitoring and alerting platform. It consists of discrete services to configure alerts, ingest and transform metrics & ev

Salesforce 495 Dec 1, 2022
The Prometheus monitoring system and time series database.

Prometheus Visit prometheus.io for the full documentation, examples and guides. Prometheus, a Cloud Native Computing Foundation project, is a systems

Prometheus 46.3k Jan 10, 2023
MixStack lets you connects Flutter smoothly with Native pages, supports things like Multiple Tab Embeded Flutter View, Dynamic tab changing, and more. You can enjoy a smooth transition from legacy native code to Flutter with it.

中文 README MixStack MixStack lets you connects Flutter smoothly with Native pages, supports things like Multiple Tab Embeded Flutter View, Dynamic tab

Yuewen Engineering 80 Dec 19, 2022
HasorDB is a Full-featured database access tool, Providing object mapping,Richer type handling than Mybatis, Dynamic SQL

HasorDB is a Full-featured database access tool, Providing object mapping,Richer type handling than Mybatis, Dynamic SQL, stored procedures, more dialect 20+, nested transactions, multiple data sources, conditional constructors, INSERT strategies, multiple statements/multiple results. And compatible with Spring and MyBatis usage.

赵永春 17 Oct 27, 2022
Simple but powerful SQL library for tiny projects

KiORM - Simple and powerful MySQL Java library for tiny projects Notice: KiORM is still in SNAPSHOT state. The code is not tested, there is no Javadoc

Rikonardo 2 Sep 13, 2022
esProc SPL is a scripting language for data processing, with well-designed rich library functions and powerful syntax, which can be executed in a Java program through JDBC interface and computing independently.

esProc esProc is the unique name for esProc SPL package. esProc SPL is an open-source programming language for data processing, which can perform comp

null 990 Dec 27, 2022
Generate API documents to any place: YApi, RAP2, Eolinker, etc. (一键生成API接口文档, 上传到YApi, Rap2, Eolinker等平台的IDEA插件)

Yapi X ?? ?? ?? 本项目已收录到YApi, Rap2官方仓库 一键生成API接口文档, 上传到YApi, Rap2, Eolinker等平台的IDEA插件. ?? 亮点 零成本、零入侵: 编写标准Javadoc即可,无需依赖swagger注解, 生成API文档准确性高达99%。 开箱即

Jetplugins 117 Dec 26, 2022
🔥 强大的动态线程池,附带监控线程池功能(没有依赖任何中间件)。Powerful dynamic thread pool, does not rely on any middleware, with monitoring thread pool function.

?? 动态线程池系统,包含 Server 端及 SpringBoot Client 端需引入的 Starter. 动态线程池监控,主意来源于美团技术公众号 点击查看美团线程池文章 看了文章后深受感触,再加上最近线上线程池的不可控以及不可逆等问题,想做出一个 兼容性、功能性、易上手等特性 集于一身的的

龙台 3.4k Jan 3, 2023
🔥 强大的动态线程池,并附带监控报警功能(没有依赖中间件),完全遵循阿里巴巴编码规范。Powerful dynamic thread pool, does not rely on any middleware, with monitoring and alarm function.

?? 动态线程池(DTP)系统,包含 Server 端及 SpringBoot Client 端需引入的 Starter. 这个项目做什么? 动态线程池(Dynamic-ThreadPool),下面简称 DTP 系统 美团线程池文章 介绍中,因为业务对线程池参数没有合理配置,触发过几起生产事故,进而

longtai 3.4k Dec 30, 2022
A shitty brainfuck interpreter that does not support comments !

Welcome to BrainfuckInterpreter ?? A shitty brainfuck interpreter that does not support comments ! Use it only if you are determined :D Author ?? Reds

RedsTom 3 Jul 15, 2022
Payara Server is an open source middleware platform that supports reliable and secure deployments of Java EE (Jakarta EE) and MicroProfile applications in any environment: on premise, in the cloud or hybrid.

Payara Platform Community Edition Create. Innovate. Elevate. Payara Platform Community Edition features open source server runtimes for development pr

Payara Foundation 847 Dec 27, 2022
Vibur DBCP - concurrent and dynamic JDBC connection pool

Vibur DBCP is concurrent, fast, and fully-featured JDBC connection pool, which provides advanced performance monitoring capabilities, including slow S

Vibur 94 Apr 20, 2022
React native wrapper for Jitsi Meet SDK Library that rely on the native view (Activity / ViewController)

react-native-jitsi-meet-sdk React native wrapper for Jitsi Meet SDK Library. This Library implements the Jitsi SDK with a native activity on the Andro

null 7 May 2, 2022