【问题标题】:Drools 7.x dynamically load rules at runtime without using mavenDrools 7.x 在运行时动态加载规则而不使用 maven
【发布时间】:2019-08-14 12:23:04
【问题描述】:

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

想法?

谢谢。

【问题讨论】:

    标签: 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 存储在内存中的结构。

    【讨论】:

    • 什么是 KieContainerLocal?
    猜你喜欢
    • 2014-06-25
    • 2013-05-07
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    相关资源
    最近更新 更多