java - Drools 7.x 在运行时动态加载规则,无需使用maven

标签 java drools high-availability

我想在运行时加载具有高可用性和版本控制支持的 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/

相关文章:

java - 是否有机会连接到主机中的在线数据库?

java - 在android中创建菜单/子菜单

collections - Drools 规则检查具有复合值限制的集合

java - 是否建议在业务逻辑中进行不必要的错误处理?例如。空检查/百分比限制检查等

xml - 在 JBoss Drools 中评估 XPath 表达式

mysql - 如何在StatefulKnowledgeSession中插入大量事实(Drools)

cassandra - Cassandra 牺牲了CAP定理的哪一部分,为什么?

kubernetes - 超时尝试为检查点作业启动 flink 作业主机

postgresql - 无法在流复制设置主服务器 Postgresql 9.5 上执行 SQL 查询

java - 位移位 - 为什么此代码使用 24、16 和 8 右移?