# drools-stream-example **Repository Path**: marsdonne/drools-stream-example ## Basic Information - **Project Name**: drools-stream-example - **Description**: Drools的动态规则示例 - **Primary Language**: Kotlin - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-08 - **Last Updated**: 2026-01-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Drools Stream Example 基于 Drools 规则引擎和 Spring Cloud Stream 的事件流处理示例项目。 ## 项目简介 本项目演示了如何在 Spring Boot 应用程序中集成 Drools 规则引擎,并通过 Spring Cloud Stream 实现事件驱动的架构。规则以动态方式存储在数据库中,支持运行时更新和热重载,无需重启服务即可生效。 ## 功能特性 - **动态规则管理**:规则存储在 PostgreSQL 数据库中,支持运行时添加、更新和删除规则 - **事件流处理**:基于 Spring Cloud Stream 实现事件驱动的消息处理 - **规则执行日志**:自动记录规则执行历史,包括触发规则数、输入输出数据等 - **热重载能力**:规则变更后可立即生效,无需重启应用 - **Docker 化测试**:集成 Testcontainers,测试环境自动配置 ## 技术栈 - **Kotlin 1.9.x**:开发语言 - **Spring Boot 3.x**:应用框架 - **Drools 8.x**:规则引擎 - **Spring Cloud Stream**:事件驱动框架 - **PostgreSQL**:主数据库 - **RabbitMQ**:消息中间件 - **Flyway**:数据库迁移管理 - **Gradle**:构建工具 - **JUnit 5**:测试框架 - **Testcontainers**:集成测试容器 ## 项目结构 ``` src/main/kotlin/com/example/drools/ ├── DroolsApplication.kt # Spring Boot 启动类 ├── EventProcessor.kt # 事件处理器配置 └── RuleComponents.kt # 规则组件、实体和服务 src/main/resources/ ├── application.yaml # 应用配置 └── db/migration/ # Flyway 迁移脚本 src/test/kotlin/com/example/drools/ ├── DroolsApplicationTests.kt # 规则管理测试 ├── EventDrivenIntegrationTests.kt # 事件驱动集成测试 ├── TestDataClass.kt # 测试数据类 ├── TestDroolsApplication.kt # 测试启动类 ├── TestMessenger.kt # 测试消息处理器 └── TestcontainersConfiguration.kt # Testcontainers 配置 ``` ## 核心组件说明 ### DroolsSet(规则实体) 存储规则定义的核心实体,包含以下字段: - `id`:规则唯一标识(UUID) - `baseName`:规则基础名称 - `packageName`:Drools 包名 - `content`:规则内容(DRL 格式) - `enabled`:启用状态 ### DroolsService(规则服务) 管理规则生命周期和规则执行的核心服务,提供以下功能: - `define()`:定义新规则 - `enable()`:启用规则 - `addOrUpdate()`:批量添加或更新规则 - `fire()`:执行规则 - `dispose()`:处理输入并记录执行日志 ### EventProcessor(事件处理器) 监听输入流事件,经过规则处理后,将结果发送到输出流。 ## 快速开始 ### 环境要求 - JDK 17+ - Docker 和 Docker Compose - PostgreSQL 15+(本地或容器运行) - RabbitMQ 3.x ### 构建项目 ```bash # 克隆项目 git clone https://gitee.com/marsdonne/drools-stream-example.git cd drools-stream-example # 构建项目 ./gradlew build # 运行测试 ./gradlew test ``` ### 运行应用 ```bash # 使用 Docker Compose 启动依赖服务 docker-compose up -d # 运行应用 ./gradlew bootRun ``` ### 配置说明 主要配置项(在 `application.yaml` 中设置): ```yaml spring: datasource: url: jdbc:postgresql://localhost:5432/drools_stream username: postgres password: postgres rabbitmq: host: localhost port: 5672 drools: output: binding: outputConsumer-in-0 ``` ## 使用指南 ### 定义规则 通过 `DroolsService.define()` 方法定义规则: ```kotlin val droolsSet = droolsService.define( baseName = "ExampleRule", packageName = "com.example.rules", content = """ rule "Example Rule" when \$applicant : Applicant(age < 18) then \$applicant.setValid(false); end """.trimIndent() ) ``` ### 执行规则 ```kotlin val log = droolsService.fire(applicant) println("触发的规则数:${log.firedRules}") ``` ### 查看执行日志 通过 `FiredLogRepository` 查询历史执行记录: ```kotlin val logs = firedLogRepository.findAllByOrderByDateFiredDesc() ``` ## 测试说明 项目包含两类测试: 1. **DroolsApplicationTests**:测试规则管理功能(初始化、加载、删除) 2. **EventDrivenIntegrationTests**:测试事件驱动的完整流程 测试使用 Testcontainers 自动启动 PostgreSQL 和 RabbitMQ,无需手动配置。 ```bash # 运行所有测试 ./gradlew test # 运行特定测试类 ./gradlew test --tests "com.example.drools.DroolsApplicationTests" ``` ## 许可证 本项目采用 [Apache License 2.0](LICENSE) 开源协议。