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的结构。