6个版本
0.2.1 | 2024年6月13日 |
---|---|
0.2.0 | 2024年2月20日 |
0.1.3 | 2024年2月11日 |
#88 在 #amqp
在meshpulse中使用
12KB
109 行
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仓库中打开问题或提交拉取请求。
此项目采用MIT许可证 - 请参阅LICENSE文件以获取详细信息。
依赖关系
~280–730KB
~18K SLoC