22 个版本
0.4.2 | 2020 年 11 月 30 日 |
---|---|
0.4.1 | 2020 年 6 月 19 日 |
0.4.0 | 2020 年 5 月 7 日 |
0.3.2 | 2019 年 8 月 25 日 |
0.1.1 | 2018 年 7 月 22 日 |
#488 在 并发
234 每月下载次数
在 11 crates 中使用
140KB
3.5K SLoC
Riker
概述
Riker 是一个用于使用 Rust 语言构建现代、并发和弹性系统的框架。Riker 致力于使并发系统中的状态和行为处理尽可能简单和可扩展。选择 Actor 模型来实现这一目标,因为它提供了熟悉且固有的简单性,同时提供了容易推理的强大保证。Actor 模型还通过使用 Actor 层次和 Actor 监督为弹性系统提供了坚实的基础。
Riker 提供
- 基于 Actor 的执行运行时
- Actor 监督以隔离和恢复失败
- 模块化系统
- 基于
futures::execution::ThreadPool
的并发 - 通过 Actor 通道进行发布/订阅消息
- 消息调度
- 开箱即用的、可配置的非阻塞日志记录
- 命令查询责任分离 (CQRS)
- 轻松运行 futures
示例
Cargo.toml
:
[dependencies]
riker = "0.4.1"
main.rs
:
use std::time::Duration;
use riker::actors::*;
#[derive(Default)]
struct MyActor;
// implement the Actor trait
impl Actor for MyActor {
type Msg = String;
fn recv(&mut self,
_ctx: &Context<String>,
msg: String,
_sender: Sender) {
println!("Received: {}", msg);
}
}
// start the system and create an actor
fn main() {
let sys = ActorSystem::new().unwrap();
let my_actor = sys.actor_of::<MyActor>("my-actor").unwrap();
my_actor.tell("Hello my actor!".to_string(), None);
std::thread::sleep(Duration::from_millis(500));
}
相关项目
提供额外功能的官方 Crates
- riker-cqrs: 命令查询责任分离支持
- riker-testkit: 使测试更容易的工具
- riker-patterns: 常见的 Actor 模式,包括
transform!
和 'ask'
路线图 & 当前开发中
项目路线图上的下一个主要主题是集群和位置透明度
- 远程 Actor
- 支持 TCP 和 UDP
- 集群(使用向量时钟)
- 分布式数据(CRDTs)
为什么选择 Riker
瑞克(Riker)是一个功能齐全的actor模型实现,能够扩展到数百或数千个微服务,并且同样能够在资源有限的硬件上运行出色,驱动无人机、物联网和机器人。Rust语言使得这一切成为可能。
Rust赋予了开发者对内存管理的控制权,不需要垃圾回收和运行时开销,同时提供现代语义和表达性语法,如特质系统。结果是,这种语言可以解决Web和物联网的问题。
瑞克在此基础上增加了熟悉的actor模型API,从而使并发、容错的系统编程变得简单。
Rust版本
瑞克目前使用的是最新的Rust Nightly。
贡献
瑞克正在寻找贡献者——加入我们的项目!您不需要是actor、并发系统或甚至Rust的专家。好主意来自每个人。
有多种方式可以做出贡献
- 提问。参与讨论是做出贡献的好方法。在我们的Gitter上找到我们:Gitter。
- 文档。我们的目标是让并发、容错的系统编程对每个人开放,这从优秀的文档开始。
- 向瑞克代码库添加内容。无论大小,您的Pull Request都可能产生影响。
- 模式、数据存储和其他支持包。我们很高兴将链接和完全归功于外部项目,这些项目为瑞克的事件存储模型提供数据库支持或实现常见的actor模式。
pre-commit
在提交代码之前,pre-commit作为git钩子自动检查您的代码。请勿跳过git钩子(即使您执行了travis TravisCI构建,构建仍然会失败)。
您可以使用两种不同的方法运行pre-commit
直接方法
pre-commit run -a
使用yarn或npm
yarn
yarn lint
npm run install
npn run lint
依赖关系
~10MB
~194K SLoC