English| 简体中文
If you like it or find it useful, please give it a star.
rule-rs
A lightweight rule engine implemented in Rust that supports asynchronous execution, component extension, and rule chain orchestration.
Key Features
- Asynchronous execution engine
- Rich built-in components
- Custom component extension support
- Nested sub-rule chain support
- AOP interceptor support
- Rule chain hot-reloading
- REST API service support
Node Types
Nodes in rule chains are divided into three types:
| Type | Description | Restriction |
|---|---|---|
| Head | Head nodes (start/delay/schedule) | Cannot be pointed to by other nodes |
| Middle | Intermediate processing nodes | No special restrictions |
| Tail | Tail nodes (like log) | Cannot point to other nodes |
Rule Chain Specifications
- Rule chains must start with a Head type node (usually a start node)
- Head nodes cannot be pointed to by other nodes
- Tail nodes cannot point to other nodes
- Circular dependencies are not allowed
Built-in Components
| Component Type | Description | Node Type | Example Configuration |
|---|---|---|---|
| start | Start node | Head | {} |
| delay | Delay process | Head | {"delay_ms": 1000} |
| schedule | Scheduled task | Head | {"cron": "*/5 * * * * *"} |
| fork | Branch node | Head | {} |
| join | Merge node | Tail | {} |
| log | Log output | Tail | {"template": "${msg.data}"} |
| script | JS script | Middle | {"script": "return msg.data;"} |
| filter | Message filter | Middle | {"condition": "value > 10"} |
| transform | Data transform | Middle | {"template": {"key": "${msg.value}"}} |
| transform_js | JS transform | Middle | {"script": "return {...msg};"} |
| rest_client | HTTP request | Middle | {"url": "http://api.example.com"} |
| subchain | Sub rule chain | Middle | {"chain_id": "..."} |
Quick Start
1. Create Rule Chain
use ;
async
Component Development Guide
1. Define Component Configuration
2. Implement Component Logic
3. Register Component
engine.register_node_type.await;
Examples
The project includes multiple complete examples:
- examples/simple_rule - Basic rule chain example
- examples/custom_component - Custom case conversion component example
- examples/filter_example - Filter example
- examples/transform_example - Data transformation example
- examples/delay_example - Delay processing example
- examples/schedule_example - Scheduled task example
- examples/rest_client - HTTP request example
- examples/weather_service - Custom weather service component example
- examples/redis_example - Redis custom component example
- examples/aop_example - AOP interceptor example
- examples/subchain_example - Sub rule chain example
- examples/circular_chain - Circular dependency example
- examples/circular_subchain - Circular dependency sub rule chain example
- examples/circular_three_chains - Circular dependency three chains example
Best Practices
-
Rule Chain Design
- Each rule chain must start with a header node
- Use branch and merge nodes appropriately to control flow
- Avoid deep node nesting
-
Component Development
- Follow single responsibility principle
- Handle error cases properly
- Provide clear configuration parameter documentation
-
Performance Optimization
- Use async operations for I/O
- Avoid repeated calculations
- Use caching appropriately
Documentation
For more detailed documentation, please refer to:
Acknowledgments
Thanks to the following projects and libraries for inspiring and helping rule-rs:
License
MIT License