【问题标题】:Drools 7.x dynamically load rules at runtime without using mavenDrools 7.x 在运行时动态加载规则而不使用 maven
【发布时间】:2019-08-14 12:23:04
【问题描述】:
【问题讨论】:
标签:
java
drools
high-availability
【解决方案1】:
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 存储在内存中的结构。