17个版本

使用旧的Rust 2015

0.1.3 2019年1月24日
0.1.2 2018年10月16日
0.1.1 2018年2月22日
0.1.0 2017年5月8日
0.0.3 2014年11月20日

#827 in 异步

Download history 22/week @ 2023-12-18 4/week @ 2023-12-25 25/week @ 2024-01-08 22/week @ 2024-01-15 13/week @ 2024-01-22 16/week @ 2024-01-29 44/week @ 2024-02-05 36/week @ 2024-02-12 101/week @ 2024-02-19 69/week @ 2024-02-26 93/week @ 2024-03-04 76/week @ 2024-03-11 56/week @ 2024-03-18 55/week @ 2024-03-25 151/week @ 2024-04-01

349 每月下载量
rabbiteer 中使用

MIT/Apache

56KB
1K SLoC

rust-amqp 构建状态 Crates.io

纯Rust实现的AMQ协议。

注意:该项目仍处于非常早期的开发阶段,它实现了所有协议解析,但并非所有协议方法都进行了封装/易于使用。预计API将在未来发生变化。

目前的功能

  • 连接到服务器
  • 打开/关闭通道
  • 声明队列/交换器
  • 实现了Basic类的所有方法,包括get、publish、ack、nack、reject、consume。因此,您可以发送/接收消息。

请查看examples/文件夹中的示例。

连接到服务器 & 打开通道

extern crate amqp;
use amqp::Session;

let mut session = Session::open_url("amqp://127.0.0.1//").unwrap();
let mut channel = session.open_channel(1).unwrap();

注意:此库支持通过OpenSSL进行TLS连接。但是,这是一个可选功能,默认启用,但可以在构建时禁用(通过命令行上的cargo --no-default-features,或在您的Cargo.toml中使用default-features = false)。

声明队列

//The arguments come in following order:
//queue: &str, passive: bool, durable: bool, exclusive: bool, auto_delete: bool, nowait: bool, arguments: Table
let queue_declare = channel.queue_declare("my_queue_name", false, true, false, false, false, Table::new());

发布消息

channel.basic_publish("", "my_queue_name", true, false,
    protocol::basic::BasicProperties{ content_type: Some("text".to_string()), ..Default::default()}, (b"Hello from rust!").to_vec());

这将向名为"my_queue_name"的队列发送消息:"Hello from rust!"。

消息的类型为 Vec<u8>,因此如果你要发送字符串,首先必须将其转换为 Vec<u8>

已知问题

  • 会话建立后,我们不处理发送到通道 0 的帧。
  • 异步方法处理不当,见 #18。
  • 仍然有一些地方我们调用 unwrap,没有正确处理错误响应。

缺少的功能

  • 没有重新建立连接的功能
  • 没有心跳支持
  • 并非所有 amqp 方法都已在 rust 接口实现。你仍然可以手动调用它们。

开发笔记

编码/解码方法的代码是通过 codegen.rb 和 amqp-rabbitmq-0.9.1.json 规范生成的。

你需要安装 rustfmt 来生成 protocol.rs。要生成一个新的规范,运行

make

使用 cargo 构建项目并运行测试套件

cargo build
cargo test

此外,还有几个源示例来展示库的使用方法,还有一个交互式示例可以快速测试库。它们可以直接从 cargo 运行

cargo run --example interactive

OpenSSL

在 MacOS X 上,如果在编译时遇到与 OpenSSL 相关的问题,例如缺少头文件或链接,请尝试

brew install openssl
export OPENSSL_INCLUDE_DIR=`brew --prefix openssl`/include
export OPENSSL_LIB_DIR=`brew --prefix openssl`/lib

cargo clean
cargo test

许可证

根据你的选择,许可如下

贡献

除非你明确说明,否则你提交的任何有意包含在作品中的贡献,根据 Apache-2.0 许可证的定义,应按上述方式双重许可,不附加任何额外条款或条件。

依赖

~8–11MB
~254K SLoC