集群系统事件溯源

一个为 Swift 分布式集群系统实现的事件溯源框架。

用法

文档: 待完成

  1. 目前没有默认的存储提供程序,因此您需要创建一个并符合 EventStore 协议。这可以是任何类、Actor 等。
  2. 安装插件。ClusterJournalPlugin 将存储包装成单例,因此也应添加单例插件(顺序很重要!)。
let node = await ClusterSystem("simple-node") {
    $0.plugins.install(plugin: ClusterSingletonPlugin())
    $0.plugins.install(
        plugin: ClusterJournalPlugin { _ in
            SomeStore()
        }
    )
}
  1. 使分布式 Actor 成为 EventSourced。提供 persistenceID 并定义 handleEvent(_:) 函数。
distributed actor SomeActor: EventSourced {

    // Some custom events for actor
    enum Event {
        case doSomething 
    }
    
    // This is important to provide, events are stored per actor using persistenceID
    distributed var persistenceID: PersistenceID { "some-actor" }
    
    distributed func doSomething() async throws {
        try await self.emit(event: .doSomething)
    }
    
    distributed func handleEvent(_ event: Event) { 
        switch event {
        case .doSomething:
            // update state
        }
    }
    
    init(actorSystem: ClusterSystem) {
        self.actorSystem = actorSystem
    }
}