通过ReleaseId创建现有项目的KieContainer的时候,提示Cannot find KieModule

通过ReleaseId创建现有项目的KieContainer的时候,提示Cannot find KieModule,解决方式为在POM文件中添加一下依赖

<dependency>
	<groupId>org.kie</groupId>
	<artifactId>kie-ci</artifactId>
	<version>${drools.version}</version>
</dependency>
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,为了实现动态热加载和版本控制,我们可以使用Git进行代码管理。在代码仓库中,我们可以使用Git的分支来实现版本控制,每个分支代表一个版本。为了支持动态热加载,我们需要使用Drools提供的Kie Scanner来实现规则引擎的动态更新。Kie Scanner可以定时扫描Git仓库中的指定分支,如果检测到分支有更新,它会自动下载最新的规则文件并重新构建Kie Container,然后将新的规则应用到规则引擎中。 为了解决规则匹配效率问题,我们可以使用Drools提供的Rete算法来实现高效匹配。Rete算法是一种基于图论的匹配算法,它可以将规则因子转化为有向无环图,并对这个图进行优化,从而达到高效匹配的目的。 为了支持动态增加减少规则因子,我们可以使用Drools提供的Kie Session来实现。Kie Session是Drools中的核心对象,它表示一个规则会话,可以对规则进行增、删、改、查等操作。我们可以在应用程序中创建一个Kie Session,然后将规则文件加载到Kie Session中。如果需要动态增加或删除规则因子,我们只需要更新规则文件,然后重新构建Kie Container,将新的规则应用到Kie Session中即可。 下面是一个基于Drools和Spring Boot的规则引擎示例: 1. 在pom.xml中添加以下依赖: ``` <dependency> <groupId>org.kie</groupId> <artifactId>kie-ci</artifactId> <version>7.54.0.Final</version> </dependency> <dependency> <groupId>org.kie</groupId> <artifactId>kie-spring</artifactId> <version>7.54.0.Final</version> </dependency> <dependency> <groupId>org.drools</groupId> <artifactId>drools-core</artifactId> <version>7.54.0.Final</version> </dependency> ``` 2. 创建一个规则文件,例如rules.drl,内容如下: ``` rule "rule1" when $m : Message( message == "Hello, World" ) then System.out.println("Rule 1 fired"); end rule "rule2" when $m : Message( message == "Goodbye, World" ) then System.out.println("Rule 2 fired"); end ``` 3. 创建一个Spring Boot应用程序,例如Application.java,内容如下: ``` @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Bean public KieContainer kieContainer() { KieServices kieServices = KieServices.Factory.get(); ReleaseId releaseId = kieServices.newReleaseId("org.example", "rules", "1.0.0"); KieRepository kieRepository = kieServices.getRepository(); KieBaseConfiguration kieBaseConfiguration = kieServices.newKieBaseConfiguration(); kieBaseConfiguration.setOption(EventProcessingOption.STREAM); KieFileSystem kieFileSystem = kieServices.newKieFileSystem(); kieFileSystem.generateAndWritePomXML(releaseId); kieFileSystem.write("src/main/resources/rules.drl", kieServices.getResources().newClassPathResource("rules.drl")); KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem); kieBuilder.buildAll(); KieModule kieModule = kieBuilder.getKieModule(); kieRepository.addKieModule(kieModule); KieContainer kieContainer = kieServices.newKieContainer(releaseId); KieScanner kieScanner = kieServices.newKieScanner(kieContainer); kieScanner.start(10000); return kieContainer; } @Bean public KieSession kieSession(KieContainer kieContainer) { KieSession kieSession = kieContainer.newKieSession(); return kieSession; } @Component public static class MessageSender { @Autowired private KieSession kieSession; public void send(Message message) { kieSession.insert(message); kieSession.fireAllRules(); } } @Data public static class Message { private String message; } } ``` 4. 运行应用程序,可以看到控制台输出: ``` 2021-09-02 16:23:11.001 INFO 12796 --- [ main] org.example.Application : Started Application in 2.364 seconds (JVM running for 3.036) Rule 1 fired ``` 5. 如果需要修改规则文件,只需要更新rules.drl文件,然后提交到Git仓库的指定分支中,Kie Scanner会自动检测到更新并重新加载规则文件。如果需要动态增加或删除规则因子,只需要在应用程序中调用kieSession.getKieBase().removeRule(...)或kieSession.getKieBase().addRule(...)方法即可。 希望这个方案能够对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值