我想在运行时加载具有高可用性和版本控制支持的 drl 文件。
我发现这些帖子适用于旧版本的 Drools 或 Maven。无法在 docker pod 上安装 Maven。
相关帖子:
Drools 6.0 dynamically load rules at runtime
I need to add .drl files at runtime (From an S3 bucket) and supply it to drools rule engine
想法?
谢谢。
最佳答案
Drools 支持从文件加载规则,我们在类似用例中使用的一种替代方法是在 Git 存储库中管理规则。
组件启动:从 git 下载规则,并将其加载到 KieContainer 中。
示例:
KieServices kieServices = KieServices.Factory.get();
KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
// Rule from string
gitRulesDao.getAllRulesFilesFromGitLab().forEach(r -> {
try {
addRuleToKie(kieFileSystem, kieServices, fileSystemBaseUrl, r);
} catch (IOException | GitLabApiException e) {
e.printStackTrace();
}
});
// build
KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem);
kieBuilder.buildAll();
// Test rule
Results results = kieBuilder.getResults();
if (results.hasMessages(Message.Level.ERROR)) {
...
}
//
KieModule kieModule = kieBuilder.getKieModule();
return new
KieContainerLocal(kieServices.newKieContainer(kieModule.getReleaseId()));
规则更改:修改规则时,git webhook 会向消息队列发送一条消息,并且订阅的组件会重新加载规则。
KieContainerLocal 是一个在内存中存储 KieContainer 的结构。
关于java - Drools 7.x 在运行时动态加载规则,无需使用maven,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57494609/