rust - 使用 tonic::Status 和 redis::RedisError 对 Redis 和 Tonic 异步应用程序进行正确的错误处理
问题描述
我正在制作一个使用 Redis 客户端的基于 Tonic 的 gRPC 微服务。我想不出在发生异步错误时将 a 隐式转换RedisError
为 a的示例。tonic::Status
async fn make_transaction(
&self,
request: Request<TransactionRequest>,
) -> Result<Response<TransactionResponse>, Status> {
let mut con = self.client.get_async_connection().await?;
con.set("my_key", 42).await?;
来自 Redis 客户端的连接可能会失败以及设置失败。我正在使用使用 Tokio 的异步接口。我宁愿不要map
错误,因为这似乎破坏了异步。
我在想我需要实现这个特性From<Status>
,From<RedisError
但不知道该怎么做。这是我的尝试,但它不起作用,因为 Tonic 想要一个tonic::Status
结构而不是ApiError
我制作的结构:
pub struct ApiError {
}
impl From<tonic::Status> for ApiError {
fn from(err: Status) -> ApiError {
ApiError { }
}
}
impl From<RedisError> for Status {
fn from(err: redis::RedisError) -> ApiError {
ApiError { }
}
}
解决方案
推荐阅读
- java - 如何注册 ContainerRequestFilter 并将变量传递给它?
- c# - 如何为列表中的每个按钮编写方法
- android-studio - 我应该在哪里定义颤振 sdk 的位置?
- sql - 如何从sql中的另一个表中引用未知数量的行?
- javascript - 将活动类分配给单击的按钮
- python - 使用 python 从 .docx 文件中提取特定的表格和图像
- javascript - TypeError:无法读取未定义 React JS 的属性“用户名”
- c# - C# 时区逻辑
- typescript - TypeORM 多对多连接表额外列
- docker - 无法运行对等体,因为从目录 /etc/hyperledger/fabric/msp 设置类型为 bccsp 的 MSP 时出错