
这是一个非官方的 Kurrent (前身为:EventStore) 数据库 gRPC 客户端 SDK,使用 Swift 编写。
Kurrent 是第一个也是唯一一个原生事件数据平台。它旨在将数据存储和流式传输为事件,用于高级分析、微服务和 AI/ML 计划等下游用例。
| 功能 |
已实现 |
| ConnectionString 已解析 |
✅ |
| Endpoint (ip, port) |
✅ |
| UserCredentials ( 用户名, 密码 ) |
✅ |
| Gossip 集群模式 |
|
| 功能 |
已实现 |
| 追加 |
✅ |
| 读取 |
✅ |
| 元数据 |
✅ |
| 订阅指定流 |
✅ |
| 订阅所有流 |
✅ |
| 批量追加 |
|
| 功能 |
已实现 |
| 创建 |
✅ |
| 更新 |
✅ |
| 结果 |
✅ |
| 删除 |
✅ |
| 启用 |
✅ |
| 禁用 |
✅ |
| 状态 |
✅ |
| 统计信息 |
✅ |
| 重置 |
✅ |
| 重启子系统 |
✅ |
| 功能 |
已实现 |
| 创建 |
✅ |
| 删除 |
✅ |
| 获取信息 |
✅ |
| 列表 |
✅ |
| 读取 |
✅ |
| 重播已暂停 |
✅ |
| 重启子系统 |
✅ |
| 订阅 |
✅ |
| 更新 |
✅ |
| 功能 |
已实现 |
| 创建 |
✅ |
| 详情 |
✅ |
| 禁用 |
✅ |
| 启用 |
✅ |
| 更新 |
✅ |
| 修改密码 |
✅ |
| 重置密码 |
✅ |
Swift Package Manager 是获取 EventStoreDB 的首选方法。只需将包依赖项添加到您的 Package.swift
dependencies: [
.package(url: "https://github.com/gradyzhuo/eventstoredb-swift.git", from: "1.0.0-beta.2")
]
...并在必要的 target 中依赖 "EventStoreDB"
.target(
name: ...,
dependencies: [.product(name: "EventStoreDB", package: "eventstoredb-swift")]
]
// Using a client settings for a single node configuration by parsing a connection string.
let settings: ClientSettings = .parse(connectionString: "esdb://admin:changeit@localhost:2113")
// convenience
let settings: ClientSettings = "esdb://admin:changeit@localhost:2113".parse()
// using string literal
let settings: ClientSettings = "esdb://admin:changeit@localhost:2113"
//using constructor
let settings: ClientSettings = .localhost()
// settings with credentials
let settings: ClientSettings = .localhost(userCredentials: .init(username: "admin",
password: "changeit")
//settings with credentials with adding ssl file by path
let settings: ClientSettings = .localhost(userCredentials: .init(username: "admin",
password: "changeit"),
trustRoots: .file("...filePath..."))
//or add ssl file with bundle
let settings: ClientSettings = .localhost(userCredentials: .init(username: "admin",
password: "changeit"),
trustRoots: .fileInBundle(forResource: "ca",
withExtension: "crt",
inBundle: .main))
// Import packages of KurrentDB.
import KurrentDB
// Using a client settings for a single node configuration by parsing a connection string.
let settings: ClientSettings = .localhost()
// Create the data array of events.
let events:[EventData] = [
.init(id: .init(uuidString: "b989fe21-9469-4017-8d71-9820b8dd1164")!, eventType: "ItemAdded", payload: ["Description": "Xbox One S 1TB (Console)"]),
.init(id: .init(uuidString: "b989fe21-9469-4017-8d71-9820b8dd1174")!, eventType: "ItemAdded", payload: "Gears of War 4")
]
// Create an identifier of stream
let streamIdentifier = StreamIdentifier(name: "stream_for_testing")
// Build a streams client.
let streams = Streams(settings: settings)
// Append two events with one response
let appendResponse = try await streams.append(to: streamIdentifier, events: events)
print("The latest revision of events appended:", appendResponse.currentRevision!)
// Import packages of KurrentDB.
import KurrentDB
// Using a client settings for a single node configuration by parsing a connection string.
let settings: ClientSettings = .localhost()
// Create an identifier of stream.
let streamIdentifier = StreamIdentifier(name: "stream_for_testing")
// Build a streams client.
let streams = Streams(settings: settings)
// Read events from stream.
let readResponses = try await streams.read(streamIdentifier, cursor: .start)
// loop it.
for try await response in readResponses {
//handle response
}
// Import packages of KurrentDB.
import KurrentDB
// Using a client settings for a single node configuration by parsing a connection string.
let settings: ClientSettings = .localhost()
// Build a persistentSubscriptions client.
let persistentSubscriptions = PersistentSubscriptions(settings: settings)
// Create it to specified identifier of streams.
try await persistentSubscriptions.createToStream(streamIdentifier: streamIdentifier, groupName: "mytest")
// Import packages of KurrentDB.
import KurrentDB
// Using a client settings for a single node configuration by parsing a connection string.
let settings: ClientSettings = .localhost()
// Build a persistentSubscriptions client.
let persistentSubscriptions = PersistentSubscriptions(settings: settings)
// Subscribe to stream or all, and get a subscription.
let subscription = try await persistentSubscriptions.subscribe(.specified(streamIdentifier), groupName: "mytest")
// Loop all results by subscription.events
for try await result in subscription.events {
//handle result
// ...
// ack the readEvent if succeed
try await subscription.ack(readEvents: result.event)
// else nack thr readEvent if not succeed.
// try await subscription.nack(readEvents: result.event, action: .park, reason: "It's failed.")
}