96SEO 2026-02-23 11:37 6
。

在高并发以及大批量的任务处理场景#xff0c;线程池的使用是必不可少的。
线程池常见痛点#xff1a;
线程池随便定义使用线程池可以减少创建销毁线程的开销避免线程过多导致系统资源耗尽。
在高并发以及大批量的任务处理场景线程池的使用是必不可少的。
线程池常见痛点
线程池随便定义线程资源过多造成服务器高负载。
线程池参数不易评估随着业务的并发提升业务面临出现故障的风险。
线程池任务执行时间超过平均执行周期开发人员无法感知。
线程池任务堆积触发拒绝策略影响既有业务正常运行。
当业务出现超时、熔断等问题时因为没有监控无法确定是不是线程池引起。
原生线程池不支持运行时变量的传递比如
GG。
无法执行优雅关闭当项目关闭时大量正在运行的线程池任务被丢弃。
线程池运行中任务执行停止怀疑发生死锁或执行耗时操作但是无从下手。
动态变更应用运行时动态变更线程池参数包括不限于核心、最大线程、阻塞队列大小和拒绝策略等支持应用集群下不同节点线程池配置差异化。
自定义报警应用线程池运行时埋点提供四种报警维度线程池过载、阻塞队列容量、运行超长以及拒绝策略报警并支持自定义时间内不重复报警。
运行监控管理应用线程池实例支持自定义时长线程池运行数据采集存储同时也支持
或内置监控页面提供可视化大屏监控运行指标。
实时查看线程池运行时数据最近半小时线程池运行数据图表展示。
功能扩展
支持线程池任务传递上下文项目关闭时支持等待线程池在指定时间内完成任务。
多种模式
Dubbo、Hystrix、RabbitMQ、RocketMQ
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4bRHnVlQ-1681738378627)(null)]
Hippo4j参考美团的设计按照租户、项目、线程池的维度划分。
再加上系统权限让不同的开发、管理人员负责自己系统的线程池操作。
比如一家公司的公共组件团队团队中负责消息、短链接网关等项目公共组件是租户消息或短链接就是项目。
Hippo4j
可以动态修改线程池也可以实时查看线程池运行时指标、负载报警、配置日志管理等。
hippo4j-adapter适配对第三方框架中的线程池进行监控如
等hippo4j-auth用户、角色、权限等hippo4j-common多个模块公用代码实现hippo4j-config提供线程池准实时参数更新功能hippo4j-console对接前端控制台hippo4j-core核心的依赖包括配置、核心包装类等hippo4j-discovery提供线程池项目实例注册、续约、下线等功能hippo4j-example
端发布需要的模块聚合hippo4j-spring-bootSpringBoot
进程功能包括用户权限、线程池监控以及执行持久化的动作。
Client
端线程池数据、动态更新线程池配置以及采集上报线程池运行时数据等。
总体功能架构如下图
源码实现。
控制台Console对接前端项目包括不限于以下模块管理
内置了很多需要通知的事件比如线程池参数变更通知、线程池活跃度报警、拒绝策略执行报警以及阻塞队列容量报警等。
目前
已经接入了钉钉、企业微信和飞书后续持续集成邮件、短信等通知渠道并且Notify
方案可以接受三方自定义的推送。
Hippo4j-Spring-Boot-StarterHippo4j
hippo4j/hippo4j-server或者底层存储数据库切换为
http://hadoop3:6691/index.html默认用户名密码admin
下载hippo4j-server1.5.0最新版本二进制文件,
https://github.com/opengoofy/hippo4j/releases/download/v1.5.0/hippo4j-server-1.5.0.tar.gz
创建数据库用户并执行conf/hippo4j_manager.sql创建和初始hippo4j_manager数据库按需修改conf/application.properties数据库连接信息
授权startup.sh执行权限后启动hippo4j-server
./bin/startup.sh如果不下载二进制也可以使用源码编译的方式修改resources目录下的application.properties数据库连接信息启动
Hippo4j-Server/Hippo4j-Bootstrap模块下
修改示例项目hippo4j-spring-boot-starter-example的application.properties文件中spring.dynamic.thread-pool.server-addr启动示例项目hippo4j-spring-boot-starter-example
http://hadoop3:6691/index.html默认用户名密码admin
配置变更访问控制台动态线程池菜单下线程池实例修改动态线程池相关参数。
Nacos、Apollo、Zookeeper、ETCD、Polaris、Consul
等三方配置中心任选其一完成线程池参数动态变更支持运行时报警、监控等功能。
config功能会更强大但同时也引入了一定的复杂性。
需要部署一个
server依赖Nacos、Apollo、Zookeeper、ETCD、Polaris、Consul
server内部无依赖中间件使用配置中心补充线程池相关参数Hippo4j
控制台添加线程池记录功能包含基础功能参数动态化、运行时监控、报警等基础功能之外扩展控制台界面、线程池堆栈查看、线程池运行信息实时查看、历史运行信息查看、线程池配置集群个性化等
dependencygroupIdcn.hippo4j/groupIdartifactIdhippo4j-config-spring-boot-starter/artifactIdversion1.5.0/version
EnableDynamicThreadPool。
创建Nacos配置文件。
在示例工程hippo4j-config-nacos-spring-boot-starter-example中配置Nacos的地址并在Nacos对应的空间和组下创建hippo4j-nacos.properties文件将原来在bootstrap.properties中的配置转移到Nacos中
spring.dynamic.thread-pool.enabletrue
spring.dynamic.thread-pool.bannertrue
spring.dynamic.thread-pool.check-state-interval5
spring.dynamic.thread-pool.monitor.enabletrue
spring.dynamic.thread-pool.monitor.collect-typesmicrometer
spring.dynamic.thread-pool.monitor.thread-pool-typesdynamic,web
spring.dynamic.thread-pool.monitor.initial-delay10000
spring.dynamic.thread-pool.monitor.collect-interval5000spring.dynamic.thread-pool.notify-platforms[0].platformWECHAT
spring.dynamic.thread-pool.notify-platforms[0].tokenac0426a5-c712-474c-9bff-72b8b8f5caff
spring.dynamic.thread-pool.notify-platforms[1].platformDING
spring.dynamic.thread-pool.notify-platforms[1].token56417ebba6a27ca352f0de77a2ae9da66d01f39610b5ee8a6033c60ef9071c55
spring.dynamic.thread-pool.notify-platforms[2].platformLARK
spring.dynamic.thread-pool.notify-platforms[2].token2cbf2808-3839-4c26-a04d-fd201dd51f9espring.dynamic.thread-pool.executors[0].thread-pool-idmessage-consume
spring.dynamic.thread-pool.executors[0].thread-name-prefixmessage-consume
spring.dynamic.thread-pool.executors[0].core-pool-size4
spring.dynamic.thread-pool.executors[0].maximum-pool-size6
spring.dynamic.thread-pool.executors[0].queue-capacity512
spring.dynamic.thread-pool.executors[0].blocking-queueResizableCapacityLinkedBlockingQueue
spring.dynamic.thread-pool.executors[0].execute-time-out800
spring.dynamic.thread-pool.executors[0].rejected-handlerAbortPolicy
spring.dynamic.thread-pool.executors[0].keep-alive-time6691
spring.dynamic.thread-pool.executors[0].allow-core-thread-time-outtrue
spring.dynamic.thread-pool.executors[0].alarmtrue
spring.dynamic.thread-pool.executors[0].active-alarm80
spring.dynamic.thread-pool.executors[0].capacity-alarm80
spring.dynamic.thread-pool.executors[0].notify.interval8
spring.dynamic.thread-pool.executors[0].notify.receiveschen.ma
spring.dynamic.thread-pool.executors[1].thread-pool-idmessage-produce
spring.dynamic.thread-pool.executors[1].thread-name-prefixmessage-produce
spring.dynamic.thread-pool.executors[1].core-pool-size2
spring.dynamic.thread-pool.executors[1].maximum-pool-size4
spring.dynamic.thread-pool.executors[1].queue-capacity1024
spring.dynamic.thread-pool.executors[1].blocking-queueResizableCapacityLinkedBlockingQueue
spring.dynamic.thread-pool.executors[1].execute-time-out800
spring.dynamic.thread-pool.executors[1].rejected-handlerAbortPolicy
spring.dynamic.thread-pool.executors[1].keep-alive-time6691
spring.dynamic.thread-pool.executors[1].allow-core-thread-time-outtrue
spring.dynamic.thread-pool.executors[1].alarmtrue
spring.dynamic.thread-pool.executors[1].active-alarm80
spring.dynamic.thread-pool.executors[1].capacity-alarm80
spring.dynamic.thread-pool.executors[1].notify.interval8
spring.dynamic.thread-pool.executors[1].notify.receiveschen.ma启动hippo4j-config-nacos-spring-boot-starter-example工程的ConfigNacosExampleApplication修改上面在Nacos配置hippo4j-nacos.properties文件可以看到日志输出修改线程池信息
ID。
这个也是前面配置的spring.dynamic.thread-pool.executors[0].thread-pool-idmessage-consume
是依赖配置中心做线程池配置动态变更。
这种模式有一种缺点改动配置文件后所有客户端都会变更。
希望
一样实现客户端集群个性化配置能够针对单独的客户端进行配置变更。
容器及三方框架线程池添加启用配置为了保持统一动态线程池配置中也有该参数配置。
配置项默认开启。
spring:dynamic:thread-pool:tomcat:enable:
true客户端集群个性化配置分别在动态线程池、容器线程池以及三方框架线程池配置下增加
spring:dynamic:thread-pool:tomcat:nodes:
192.168.1.5:*,192.168.1.6:8080executors:-
192.168.1.5:*adapter-executors:-
dependencygroupIdio.micrometer/groupIdartifactIdmicrometer-registry-prometheus/artifactId
/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-actuator/artifactId
/dependency添加配置上面Nccos配置已添加项目启动访问
http://localhost:29999/actuator/prometheus
后续则可以通过部署、配置Prometheus和Grafana实现指标采集和可视化监控详细可以查看前面文章或者Hippo4j的官方文档
前面部署章节主要演示无中间件依赖的大体流程和依赖配置中心相似。
通过
messageConsumeDynamicExecutor;messageConsumeDynamicExecutor.execute(()
messageProduceDynamicExecutor;messageProduceDynamicExecutor.execute(()
hippo4j.core.clean-history-data-enable是否开启线程池历史数据清洗默认开启。
hippo4j.core.clean-history-data-period线程池历史数据保留时间默认值30单位分钟。
服务端会保留这个配置时间的数据超过这个时间则会被清理。
比如按照默认值
hippo4j.core.monitor.report-type客户端监控上报服务端类型可选值http、netty默认
配置后需要在客户端对应开启才可生效。
用来应对大量动态线程池监控场景。
DubboHystrixRabbitMQRocketMQAlibabaDubboRocketMQSpringCloudStreamRabbitMQSpringCloudStream
artifactIdhippo4j-spring-boot-starter-adapter-dubbo/artifactId
artifactIdhippo4j-spring-boot-starter-adapter-alibaba-dubbo/artifactId
artifactIdhippo4j-spring-boot-starter-adapter-hystrix/artifactId
artifactIdhippo4j-spring-boot-starter-adapter-rabbitmq/artifactId
artifactIdhippo4j-spring-boot-starter-adapter-rocketmq/artifactId
artifactIdhippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq/artifactId
artifactIdhippo4j-spring-boot-starter-adapter-spring-cloud-stream-rabbitmq/artifactId
version1.5.0/version/dependency如果省事仅需引入一个全量包框架底层会根据条件判断加载具体线程池适配器。
artifactIdhippo4j-spring-boot-starter-adapter-all/artifactId
version1.5.0/version/dependency在官方示例中也提供集中线程池适配示例
修改hippo4j-spring-boot-starter-adapter-rocketmq-example的spring.dynamic.thread-pool.server-addr和rocketmq.nameServer启动程序后修改框架线程池-RocketMQ的实例配置参数
接口在hippo4j-example-core中添加MyDemoRejectedExecutionHandler.java内容如下
cn.hippo4j.example.core.handler;import
cn.hippo4j.common.executor.support.CustomRejectedExecutionHandler;import
java.util.concurrent.RejectedExecutionHandler;import
java.util.concurrent.ThreadPoolExecutor;public
CustomMyDemoRejectedExecutionHandler();
CustomMyDemoRejectedExecutionHandler
LoggerFactory.getLogger(this.getClass());
logger.error(线程池抛出拒绝策略MyDemoRejected);
}}在hippo4j-spring-boot-starter-example模块中src/main/resources/META-INF/services
cn.hippo4j.common.executor.support.CustomRejectedExecutionHandler
文件内仅放一行自定义拒绝策略全限定名即可原本已有这个文件我们修改内容即可
cn.hippo4j.example.core.handler.MyDemoRejectedExecutionHandler启动hippo4j-spring-boot-starter-example修改实例线程池配置
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback