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 异步
349 每月下载量
在 rabbiteer 中使用
56KB
1K SLoC
rust-amqp
纯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(《LICENSE-APACHE》或http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证(《LICENSE-MIT》或http://opensource.org/licenses/MIT)
。
贡献
除非你明确说明,否则你提交的任何有意包含在作品中的贡献,根据 Apache-2.0 许可证的定义,应按上述方式双重许可,不附加任何额外条款或条件。
依赖
~8–11MB
~254K SLoC