Drools 7.x 在运行时动态加载规则而不使用 maven
Drools 7.x dynamically load rules at runtime without using maven
我想在运行时加载一个具有高可用性和版本控制支持的 drl 文件。
我发现的帖子适用于旧版本的 Drools 或 Maven。在 docker pods 上安装 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的结构。
我想在运行时加载一个具有高可用性和版本控制支持的 drl 文件。
我发现的帖子适用于旧版本的 Drools 或 Maven。在 docker pods 上安装 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的结构。