2个版本
0.1.1 | 2021年3月2日 |
---|---|
0.1.0 | 2020年10月10日 |
#49 in #endpoint
在 4 crate 中使用
33KB
455 行
qrpc-sdk
qrpc协议连接rpc代理与不同的服务端点。每个服务端点提供一组可调用的函数和类型序列化数据。
Your app logic Serialise types Pass data along
+--------------+ +--------------+ +--------------+
| Your service | - | qrpc-sdk | - | qrpc-broker |
+--------------+ +--------------+ +--------------+
|
+--------------+ +--------------+ +--------------+
| Your UI app | - | qrpc-sdk | - | libqaul |
+--------------+ +--------------+ +--------------+
Your app UI Deserialise types Main db/ router
更多信息请参考贡献者手册。
lib.rs
:
在qrpc消息总线上编写客户端的工具包。这个总线是qaul.net服务生态系统的骨干。通过它,您可以创建与应用程序(称为“服务”)交互的应用程序,并与相同消息代理上的其他服务。
这些crate文档描述了API和基本用法。有关该生态系统核心概念的概述,请参阅贡献者手册。
此外,您可以通过将"--features internals
"传递给您的cargo调用来访问内部实用程序的文档。这些组件无论如何都会通过API公开,但只在需要时进行文档记录,以避免使主要文档杂乱。
使用此SDK
为了与运行的qrpc-broker
实例交互,您的服务需要注册自己及其功能。
首先,您的服务需要一个地方来保存一些状态,通过组合此sdk的不同部分来创建一个应用程序。
您创建一个Service
和一个RpcSocket
,并连接到rpc代理套接字。您使用此连接的第一件事是在Service
上调用register(...)
。这建立了连接,代理将其服务保存到其地址查找表中,并且您获得一个hash-id以在未来的交互中识别您。
use qrpc_sdk::{Service, RpcSocket, default_socket_path};
let mut serv = Service::new("com.example.myapp", 1, "A simple app");
let (addr, port) = default_socket_path();
let sock = RpcSocket::connect(addr, port).await?;
serv.register(sock).await?;
println!("Service registered! ID: {}", serv.hash_id().unwrap());
接下来,您需要包含您想要使用的组件的客户端库,并在您的服务上调用组件初始化器中的connect(...)
。
// serv.connect(libqaul_rpc::Init).await?;
这将建立与libqaul
组件的连接并验证其功能集。此机制由ServiceConnector
提供。[点击查看](https://docs.rs/qrpc-sdk/0.1.1/trait.ServiceConnector.html)。您的服务也需要实现此机制才能在qrpc总线上被其他服务使用。
之后,您可以在组件的公共API类型上调用函数。您可以通过服务句柄获取其副本。
// net.qaul.libqaul is exposed as libqaul_rpc.COMP_ID
// let users = serv.component("net.qaul.libqaul").list_users().await?;
// println!("Available users: {:?}", users);
如果您想查看最小功能服务的示例,请参阅ping
存储库。
依赖关系
~7–20MB
~250K SLoC