#communication #mqtt #grpc #amqp #http

meshpulse_derive

这个crate提供了一个用于meshpulse crate的derive宏。它允许您轻松地为您的自定义类型实现MeshPulse特质。

6个版本

0.2.1 2024年6月13日
0.2.0 2024年2月20日
0.1.3 2024年2月11日

#88#amqp


meshpulse中使用

MIT许可证

12KB
109

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仓库中打开问题或提交拉取请求。

此项目采用MIT许可证 - 请参阅LICENSE文件以获取详细信息。

依赖关系

~280–730KB
~18K SLoC