5个版本
0.2.1 | 2024年6月13日 |
---|---|
0.2.0 | 2024年2月20日 |
0.1.3 | 2024年2月11日 |
0.1.1 | 2024年2月9日 |
0.1.0 | 2024年2月9日 |
#1387 in 网络编程
30KB
462 行
Meshpulse
Meshpulse是一个Rust crate,旨在通过事件或RPC(远程过程调用)调用促进微服务之间的无缝通信。它抽象掉了MQTT、gRPC、AMQP或HTTP等通信协议的复杂性,使开发者能够专注于构建健壮、可扩展的微服务,而无需被服务间通信的复杂性所困扰。
- 事件驱动通信:轻松在微服务之间交换事件,实现实时更新和事件驱动架构。
- RPC调用:以最小开销在服务之间进行远程过程调用,确保网络通信的效率。
- 协议无关:支持MQTT、gRPC、AMQP和HTTP等多种底层协议,提供灵活性,以便为您的用例选择最佳协议。
- 简单性:考虑到简单性,Meshpulse抽象掉了通信协议的复杂性,使其易于集成到现有项目和工作中。
- 可扩展性:设计用于扩展,Meshpulse确保在高度分布式和复杂的环境中微服务之间的顺畅通信。
安装
要在Rust项目中使用Meshpulse,只需将其添加到Cargo.toml文件中的依赖项即可
[dependencies]
# To use with MQTT
meshpulse = { version = "0.2.0", features = ["mqtt"]}
用法
以下是一个基本示例,演示如何使用Meshpulse进行事件驱动通信
发布
use meshpulse::prelude::*;
#[derive(Serialize, Deserialize, Event)]
struct TestEvent {
message: String,
}
fn main() {
let event = TestEvent {
message: "hello".to_string(),
};
let result = event.publish();
assert_eq!(result.is_ok(), true);
}
订阅
use meshpulse::prelude::*;
#[derive(Serialize, Deserialize, Event)]
struct TestEvent {
message: String,
}
fn main() {
let sub_result = TestEvent::subscribe(|event| {
println!("Received event: {:?}", event.message);
});
assert_eq!(sub_result.is_ok(), true);
// When you're no longer interested in events...unsubscribe
let unsub_result = sub_result.unwrap().unsubscribe();
assert_eq!(unsub_result.is_ok(), true);
}
RPC
发送并执行RPC请求
use meshpulse::prelude::*;
#[derive(Serialize, Deserialize, RpcRequest)]
struct MultiplierRequest{
number: i32,
multiplier: i32
}
async fn main() {
let request = MultiplierRequest {
number: 5,
multiplier: 2
};
let response = request.request::<i32>().await.unwrap();
assert_eq!(response, 10);
}
订阅RPC请求并为请求分配处理函数
use meshpulse::prelude::*;
fn handle_multiplier_request(request: MultiplierRequest) -> Result<i32, Box<dyn std::error::Error>> {
Ok(request.number * request.multiplier)
}
let handler = RpcRequestHandler::start(handle_multiplier_request);
// keep the handler alive as long as required.
// To stop the handler
handler.stop();
配置
要与MQTT通信,Meshpulse需要以下环境变量
MQTT_HOST='tcp://your-host:1883'
MQTT_USERNAME='your-username'
MQTT_PASSWORD='some secret passw0rd'
有关更详细的用法说明和示例,请参阅文档。
欢迎贡献力量!如果您遇到任何问题或对改进有建议,请随时在GitHub仓库上打开一个问题或提交一个pull request。
许可证
本项目采用MIT许可证 - 请参阅LICENSE文件以获取详细信息。
依赖
~3–11MB