You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

KieServer多线程场景下多默认KieBase告警及部署失败问题咨询

问题根因分析

核心原因均为默认Kie资源的配置冲突:

  • 初始告警来自依赖的2个项目,每个都配置了默认的KieBase、KieSession、StatelessKieSession,当前项目运行时检测到多份默认资源,自动禁用了所有默认配置,所有资源仅能通过名称调用
  • 手动配置2个Stateless KieSession后未指定默认实例,而Per request运行时策略默认会调用全局默认KieSession处理请求,找不到就抛出java.lang.RuntimeException: Cannot find a default KieSession错误
  • 多线程处理能力受限和默认资源禁用无直接关联,是Per request策略本身每个请求会独立创建KieSession实例,叠加默认资源禁用后的额外查找步骤导致的性能瓶颈
解决方案

步骤1:清理依赖项目的默认配置

检查2个依赖项目的kmodule.xml文件,移除所有default="true"的配置,确保仅当前主项目可配置默认Kie资源

步骤2:调整当前项目kmodule配置

1个KieBase搭配2个Stateless KieSession的配置规则如下:

  • 保留唯一KieBase的default="true"属性
  • 2个Stateless KieSession中保留1个设为默认,另一个仅配置name属性用于显式调用
    示例配置片段:
<kmodule xmlns="http://www.drools.org/xsd/kmodule">
  <kbase name="mainKBase" default="true" packages="com.your.business.rules">
    <ksession name="defaultStatelessSession" type="stateless" default="true"/>
    <ksession name="customStatelessSession" type="stateless" default="false"/>
  </kbase>
</kmodule>

步骤3:调整多线程调用逻辑

需要同时使用2个Stateless KieSession做并行处理时,不要走默认调用链路,显式通过Session名称获取对应实例:

  • 调用Kie Server API时在请求头添加X-KIE-SESSION: {自定义Session名称}指定调用对象
  • 代码侧调用时使用kieContainer.newStatelessKieSession("customStatelessSession")显式获取实例

步骤4:运行时策略优化

如果规则无状态、无全局变量修改操作,可将运行时策略从Per request调整为Singleton,复用会话实例大幅提升多线程处理性能,Stateless KieSession本身线程安全,无并发风险

验证操作

调整配置后重新部署项目,确认server.log无多默认资源告警,两个Session均可正常调用,多线程压测下QPS符合预期即可。

内容的提问来源于stack exchange,提问作者Jovana Vajagic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 00:36:05