【问题标题】:optaplanner with aws lambdaoptaplanner 与 aws lambda
【发布时间】:2018-07-10 19:58:49
【问题描述】:

我正在使用 optaplanner 解决调度问题。我想从 AWS Lambda 调用调度代码(我知道 Lambda 的最大执行时间是 5 分钟,这对这个应用程序来说没问题)

为了实现这一点,我构建了一个包含两个模块的 maven 项目: module-1:调度优化代码 模块 2:aws lambda 处理程序(从模块 1 调用调度代码)

当我在 IntelliJ Idea 中为 module-1(具有 optaplanner 代码)运行测试时,它运行良好。

当我调用 lambda 函数时,我得到以下异常:

java.lang.ExceptionInInitializerError:    
java.lang.ExceptionInInitializerError
java.lang.ExceptionInInitializerError
 at org.kie.api.internal.utils.ServiceRegistry.getInstance(ServiceRegistry.java:27)
 ...
Caused by: java.lang.RuntimeException: Child services [org.kie.api.internal.assembler.KieAssemblers] have no parent
 at org.kie.api.internal.utils.ServiceDiscoveryImpl.buildMap(ServiceDiscoveryImpl.java:191)
 at org.kie.api.internal.utils.ServiceDiscoveryImpl.getServices(ServiceDiscoveryImpl.java:97)
 ...

我在 maven 文件中包含以下依赖项:org.optaplanner optaplanner-core 7.7.0.Final

还检查了 jar 文件是否有 drools-core、kie-api、kei-internal、drools-compiler。有谁知道可能是什么问题?

【问题讨论】:

  • 对于它的价值(不多),EasyScoreCalculator 和 IncrementalScoreCalculator 不会有这个问题。
  • @GeoffreyDeSmet 当我从 XMLResource 初始化 SolverFactory 时发生此错误,远远早于分数计算阶段。
  • 你 100% 确定吗?我希望它发生在solverFactory.buildSolver(),而不是SolverFactory.createFromXmlResource()。在前一种情况下,其他计算器不受影响。
  • @GeoffreyDeSmet 是的,你是对的,它发生在solverFactory.buildSolver()

标签: aws-lambda drools optaplanner drools-planner


【解决方案1】:

我在尝试运行包含示例 OptaPlanner 项目的胖 jar 时遇到了同样的错误。稍微调试一下发现问题是services在调用ServiceDiscoveryImpl::buildMap时为空;我在构建中使用了第一个 META-INF/kie.conf,因此该文件中缺少服务。当然,您的测试会正常工作,因为类路径将包含所有依赖项(即几个不同的 META-INF/kie.conf 文件),而不是您尝试在 lambda 上执行的程序集。

连接这些文件(在程序集中使用适当的合并策略)解决了问题,并且考虑到ServiceDiscoveryImpl 加载这些文件的方式,看起来很合适。更新后的 JAR 作为 AWS lambda 正常运行。

注意:我使用的是 v7.12.0.Final 云平衡示例中的默认 scoreDrl

【讨论】:

【解决方案2】:

在 AWS-lambda 等受限环境中运行时,听起来像是 drools 中的错误。请create a JIRA并在此处链接。

【讨论】:

  • 感谢您的回复@Geoffrey。我创建了一个 jira (issues.jboss.org/browse/DROOLS-2726) 票证。这是可以尽快解决的问题还是您建议任何解决方法?
  • 显然还没有修复。
  • 我已经改进了错误报告,因此它可以提交给 drools 核心人员。 解决方法:不要使用 Drools 分数计算。
猜你喜欢
  • 1970-01-01
  • 2019-10-31
  • 1970-01-01
  • 1970-01-01
  • 2021-04-23
  • 2020-05-31
  • 2019-02-13
  • 2016-02-14
  • 2020-06-04
相关资源
最近更新 更多