#communication #mqtt #grpc #amqp #http #remote-procedure #event-driven-architecture

meshpulse

Meshpulse是一个基于MQTT、AMQP、gRPC或HTTP,用于微服务之间轻松通信的Rust库。

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 网络编程

MIT许可证

30KB
462

Meshpulse

Cargo build and test Crates.io Documentation GitHub issues GitHub stars GitHub license

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