开源项目 eventually-rs
使用教程
eventually-rsEvent Sourcing for Rust项目地址:https://gitcode.com/gh_mirrors/ev/eventually-rs
项目介绍
eventually-rs
是一个用于 Rust 语言的事件溯源(Event Sourcing)库。事件溯源是一种架构模式,通过存储所有变更作为不可变的事件序列来记录数据的完整历史。eventually-rs
提供了必要的抽象来建模领域实体(在术语中称为聚合),并使用事件存储(即仅追加的事件日志)来保存这些事件。
项目快速启动
安装依赖
首先,将 eventually-rs
添加到你的项目依赖中。在 Cargo.toml
文件中添加以下内容:
[dependencies]
eventually = { version = "0.5.0", features = ["full"], git = "https://github.com/get-eventually/eventually-rs" }
示例代码
以下是一个简单的示例,展示如何使用 eventually-rs
进行事件溯源:
use eventually::{EventStore, InMemoryEventStore};
use eventually::event::{Event, EventData};
use eventually::aggregate::{Aggregate, AggregateEvent};
#[derive(Debug, Clone, PartialEq, Eq)]
struct Account;
#[derive(Debug, Clone, PartialEq, Eq)]
enum AccountEvent {
Created,
Deposited(u64),
Withdrawn(u64),
}
impl Event for AccountEvent {
type Aggregate = Account;
fn apply_to(self, aggregate: &mut Self::Aggregate) {
match self {
AccountEvent::Created => {}
AccountEvent::Deposited(amount) => {}
AccountEvent::Withdrawn(amount) => {}
}
}
}
impl Aggregate for Account {
type Event = AccountEvent;
fn new() -> Self {
Account
}
}
fn main() {
let event_store = InMemoryEventStore::<Account>::new();
let mut account = Account::new();
let events = vec![
AggregateEvent::new(AccountEvent::Created),
AggregateEvent::new(AccountEvent::Deposited(100)),
AggregateEvent::new(AccountEvent::Withdrawn(50)),
];
for event in events {
event_store.append(event).unwrap();
}
let stored_events = event_store.load(&account).unwrap();
for event in stored_events {
account.apply(event);
}
println!("Account state: {:?}", account);
}
应用案例和最佳实践
银行账户示例
eventually-rs
提供了一个银行账户的示例,展示了如何使用事件溯源来实现一个通用的银行账户管理系统。这个示例涵盖了账户的创建、存款和取款操作,并展示了如何通过事件日志来恢复账户的当前状态。
最佳实践
- 事件设计:确保事件设计是不可变的,并且能够完整地描述一个业务操作。
- 聚合管理:合理划分聚合边界,确保聚合的一致性和性能。
- 事件存储:选择合适的事件存储后端,如 PostgreSQL,以确保事件的持久性和可扩展性。
典型生态项目
eventually-postgres
eventually-postgres
是 eventually-rs
的一个官方支持的后端实现,提供了针对 PostgreSQL 数据库的事件存储和聚合根仓库实现。它利用 PostgreSQL 的事务特性来确保事件的完整性和一致性。
其他生态项目
eventually-cli
:一个命令行工具,用于管理和查询事件存储。eventually-web
:一个 Web 界面,用于可视化事件日志和聚合状态。
通过这些生态项目,eventually-rs
提供了一个完整的事件溯源解决方案,适用于各种复杂的业务场景。
eventually-rsEvent Sourcing for Rust项目地址:https://gitcode.com/gh_mirrors/ev/eventually-rs