5个版本 (3个破坏性更新)
0.4.0 | 2022年1月31日 |
---|---|
0.3.0 | 2021年11月2日 |
0.2.0 | 2021年10月28日 |
0.1.1 | 2021年10月15日 |
0.1.0 | 2021年10月14日 |
#1938 在 数据库接口
每月25次下载
135KB
2K SLoC
Rust gRPC客户端驱动程序
此crate提供用于查询Stargate的高级异步Rust驱动程序。它公开了由gRPC proto文件生成的客户端存根以及一组实用工具,使它们更容易使用。
功能
- 所有Stargate gRPC协议消息都作为Rust结构和枚举公开
- 基于令牌的认证
- 异步查询
- 带有通过名称或位置轻松绑定变量的查询构建器
- 查询绑定值的编译时类型检查(可选)
- 轻松在gRPC值类型和常用Rust类型之间进行转换;支持基本类型、列表、映射、元组和用户定义类型,具有任意嵌套级别
- 结果集分页
快速入门指南
添加所需依赖项。您至少需要stargate-grpc
和一个异步框架,例如tokio或async-std。
[dependencies]
stargate-grpc = "0.3"
tokio = { version = "1", features = ["full"]}
此时,您应该可以使用cargo build
构建项目,并且它会获取和编译依赖项。
为了方便起见,将以下行添加到应用程序源代码的包含中
use stargate_grpc::*;
以下所有代码都假设在异步上下文中执行(例如,在async main
内部)。
连接
提供Stargate接口的主要结构是StargateClient
。获取实例的最简单方法是使用提供的builder
use std::str::FromStr;
let mut client = StargateClient::builder()
.uri("https://127.0.0.1:8090/")? // replace with a proper address
.auth_token(AuthToken::from_str("XXXX-YYYY-ZZZZ...")?) // replace with a proper token
.tls(Some(client::default_tls_config()?)) // optionally enable TLS
.connect()
.await?;
查询
使用Query::builder
创建查询,绑定查询值并传递查询参数
let query = Query::builder()
.keyspace("test") // set the keyspace the query applies to
.consistency(Consistency::LocalQuorum) // set consistency level
.query("SELECT login, emails FROM users WHERE id = :id") // set the CQL string
.bind_name("id", 1000) // bind :id to 1000
.build(); // build the Query
运行查询并等待其结果
use std::convert::TryInto;
let response = client.execute_query(query).await?; // send the query and wait for gRPC response
let result_set: ResultSet = response.try_into()?; // convert the response to a ResultSet
处理结果集
结果集以行集合的形式返回。一个Row
可以轻松地解包到元组中
for row in result_set.rows {
let (login, emails): (String, Vec<String>) = row.try_into()?;
// ...
}
也可以将row
中的每个字段分别移出,并将其转换为所需类型
for mut row in result_set.rows {
let login: String = row.try_take(0)?; // == row.values[0].take().try_into()?;
let emails: Vec<String> = row.try_take(1)?; // == row.values[1].take().try_into()?;
// ...
}
从源代码构建
-
安装Rust工具链
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
-
在项目的根目录中运行
build
git clone https://github.com/stargate/stargate-grpc-rust-client stargate-grpc cd stargate-grpc cargo build
运行示例
为了方便,该项目包含一些位于 examples
目录中的示例,这些示例演示了连接、创建模式、插入数据和查询。您需要有一个运行的Stargate集群实例才能运行它。有关如何设置Stargate的详细信息,请参阅官方Stargate文档。
每个示例程序都接受Stargate协调器的URL、身份验证令牌和命名空间名称。
cargo run --example <example> [-- [--keyspace <keyspace>] [--token <token>] [--tls] [<url>]]
身份验证令牌值也可以通过 SG_TOKEN
环境变量提供。
-
使用Docker设置开发模式下的Stargate服务器
docker run --name stargate \ -p 8081:8081 \ -p 8090:8090 \ -d \ -e CLUSTER_NAME=stargate \ -e CLUSTER_VERSION=3.11 \ -e DEVELOPER_MODE=true \ stargateio/stargate-3_11:v1.0.42
-
获取身份验证令牌
curl -L -X POST 'http://127.0.0.1:8081/v1/auth' \ -H 'Content-Type: application/json' \ --data-raw '{ "username": "cassandra", "password": "cassandra" }' {"authToken":"2df7e75d-92aa-4cda-9816-f96ccbc91d80"}
-
设置身份验证令牌变量
export SG_TOKEN=2df7e75d-92aa-4cda-9816-f96ccbc91d80
-
运行
keyspace
示例以测试连接并创建测试命名空间(默认命名空间名称:stargate_examples
)cargo run --example keyspace Connected to http://127.0.0.1:8090 Created keyspace stargate_examples
-
运行其他示例
cargo run --example query Finished dev [unoptimized + debuginfo] target(s) in 0.04s Running `target/debug/examples/basic` Connected to http://127.0.0.1:8090 Created schema Inserted data. Now querying. All rows: 2 user_2 ["[email protected]", "[email protected]"] 3 user_3 ["[email protected]", "[email protected]"] 7 user_7 ["[email protected]", "[email protected]"] 9 user_9 ["[email protected]", "[email protected]"] 4 user_4 ["[email protected]", "[email protected]"] 0 user_0 ["[email protected]", "[email protected]"] 8 user_8 ["[email protected]", "[email protected]"] 5 user_5 ["[email protected]", "[email protected]"] 6 user_6 ["[email protected]", "[email protected]"] 1 user_1 ["[email protected]", "[email protected]"] Row with id = 1: 1 user_1 ["[email protected]", "[email protected]"]
依赖关系
~14–26MB
~467K SLoC