2 个不稳定版本
0.2.0 | 2019年5月1日 |
---|---|
0.1.0 | 2019年3月25日 |
#22 在 #resp
57KB
1.5K SLoC
MeiliES
基于 Rust、使用 Redis 协议的事件存储
简介
该项目不再维护,请考虑寻找其他工具。
MeiliES 是一个使用 RESP (REdis Serialization Protocol) 进行通信的 事件源数据库。这样可以通过重用现有的协议来创建客户端。例如,可以使用 官方 Redis 命令行界面 程序与 MeiliES 通信。如果您想了解更多,请参阅 发布博客文章。
事件存储类似于 Kafka 或 Rabbit MQ,但它将事件永久存储在磁盘上。服务器的第一个目的是将流中的事件发布给所有已订阅的客户端,注意事件按接收顺序保存。客户端还可以指定从哪个事件号(递增)开始读取,因此可以通过读取和重构仅包含新事件的本地状态来恢复。请注意,消息队列不适合事件源。
特性
- 事件发布
- 从可选事件号进行 TCP 流订阅
- 弹性连接(关闭时重新连接)
- 基于 Redis 的协议
- 全 Rust,使用 sled 作为内部存储
- 编译时间约为 2 分钟
构建 MeiliES
要运行 MeiliES,您需要 Rust,可以通过 https://rustup.rs 上的步骤进行安装。一旦 Rust 在您的 PATH
中,您就可以克隆并构建 MeiliES 二进制文件。
git clone https://github.com/meilisearch/MeiliES.git
cd MeiliES
cargo install --path meilies-server
cargo install --path meilies-cli
基本事件存储使用方法
一旦 MeiliES 安装并可在您的 PATH
中使用,您可以通过执行以下命令运行它。
meilies-server --db-path my-little-db.edb
现在,您的计算机上正在运行一个 MeiliES 服务器,并监听 127.0.0.1:6480
。在另一个终端窗口中,您可以指定客户端仅监听新事件。
meilies-cli subscribe 'my-little-stream'
再次在另一个中,您可以发送新事件。所有订阅了同一流的所有客户端都将看到这些事件。
meilies-cli publish 'my-little-stream' 'my-event-name' 'Hello World!'
meilies-cli publish 'my-little-stream' 'my-event-name' 'Hello Cathy!'
meilies-cli publish 'my-little-stream' 'my-event-name' 'Hello Kevin!'
meilies-cli publish 'my-little-stream' 'my-event-name' 'Hello Donut!'
但这并不是事件源的一个真正有趣的用法,对吧?!让我们来看一个更有趣的用法。
真实的事件存储用法
MeiliES按接收顺序存储所有客户端发送的所有流的全部事件。
所以让我们检查一下,并指定我们想要开始读取事件的时刻。一旦流中没有更多事件,服务器将从接收事件的那一刻开始发送事件。
流名称指定
流名称的组成如下。
{名称}{:从}{:到}
- 名称:流的名称,区分大小写,不得包含空格(建议使用连字符分隔单词)。
- 从:指定开始读取的第一个事件编号。可选,如果没有设置,MeiliES将从末尾开始。
- 到:指定要发送的最后一个事件编号(排除范围)。可选值,如果没有给出,将永远不会停止。
示例
我们可以通过在起始事件编号前加上冒号来做到这一点。
meilies-cli subscribe 'my-little-stream:0'
在这个示例中,我们将从流的第一个事件开始读取。但我们也可以指定从第三个事件开始读取。
meilies-cli subscribe 'my-little-stream:2'
或者从尚不存在的事件开始!尝试向此流发送事件,您将看到:只有第五个事件会出现。
meilies-cli subscribe 'my-little-stream:5'
也可以读取到事件编号为止的流。
meilies-cli subscribe 'my-little-stream:3:5'
当前限制
当前的实现与订阅的流总数有关的一些限制。问题是每个流和每个客户端都会启动一个线程。例如,如果有两个客户端订阅了同一个流,服务器将启动两个线程,每个客户端一个,而不是只启动一个线程并将新事件发送到客户端池。
更糟糕的是,如果客户端关闭连接,启动的线程不会立即停止,而是在某些流活动之后。
支持
对于商业支持,请发送电子邮件至 [email protected]。
依赖
~4MB
~58K SLoC