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

OptaPlanner Spring Boot下SolverManager提交ProblemFactChange咨询

功能进展说明

目前OptaPlanner官方尚未在SolverManager的稳定版API中提供原生的submitProblemFactChange()能力,该特性仍在官方迭代roadmap中,暂时没有明确的上线时间节点。

可行的Workaround方案

根据部署场景的不同,你可以选择以下两种经过实测的实现方案:

单节点部署场景

  • 自定义一个全局线程安全的运行中Solver注册表,推荐使用ConcurrentHashMap,key为你自定义的求解任务ID,value为对应任务的Solver实例
  • 调用SolverManager.solveAndListen()启动求解任务时,在求解回调监听器中拿到当前任务对应的Solver实例,将其存入上述注册表
  • 需要提交事实变更时,从注册表中取出对应Solver实例,直接调用solver.addProblemFactChange(change)方法即可,该方法本身是线程安全的,无需额外加锁
  • 注意在求解任务结束、手动终止、抛出异常的回调节点,将对应Solver实例从注册表中移除,避免出现内存泄漏问题

分布式多节点部署场景

  • 新增消息队列中间件,所有ProblemFactChange请求先发送到消息队列的对应主题
  • 每个运行Solver服务的节点只监听分配到本节点的求解任务对应的变更消息,收到消息后调用本地运行的Solver实例的addProblemFactChange()方法即可
  • 配合外部存储(如Redis)记录每个求解任务所在的节点信息,用来路由变更请求到正确的节点即可
注意事项
  • 所有自定义的ProblemFactChange实现类必须实现序列化接口,分布式场景下需确保变更对象可以正常在网络中传输
  • 不要手动调用Solver实例的solver.solve()、solver.terminate()等生命周期相关方法,避免和SolverManager的内部管理逻辑冲突
  • 该方案在OptaPlanner 8.x、9.x版本上均可稳定运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:45:02