gpt4 book ai didi

c++ - gRPC 错误返回意外的详细信息字段

转载 作者:行者123 更新时间:2023-11-30 04:48:46 25 4
gpt4 key购买 nike

我正在我的 C++ 服务器中实现 gRPC 错误处理,该服务器具有由另一个基于 nodejs 的服务器(在本例中实际上是客户端)调用的路由。

我的问题是传递给 C++ 端的 grpc::Status 构造函数的 error_details 参数与 error_details 不同客户收到。

C++ 服务器:

return grpc::Status(
isError ? grpc::StatusCode::UNKNOWN : grpc::StatusCode::OK,
"application-specific error code", // the error_message param
"Extended error details" // the error_details param
);

NodeJS 客户端:

try {
await grpc.makeCall({params: 12345})
} catch(err) {
const { details, message } = err
console.log({ details, message });
// -> { details: "application-specific error code", message: "2 UNKNOWN application-specific error code" }
// Expected message:
// -> { details: "Extended error", message: "application-specific error code" }
}

需要说明的是,客户端中的详细信息字段包含来自服务器的消息字段,而客户端中的消息字段包含来自服务器的消息字段加上 gRPC 状态代码作为前缀。

不过,我确实注意到,我所关注的详细信息字段在这个(非常简单的) Prop 下可用:

err.metadata._internal_repr['grpc-status-details-bin'][0].toString() // Originally a buffer  

所以我的问题是:
有没有搞错?我错过了什么吗?

最佳答案

这里不同的 API 对相同的底层协议(protocol)信息有不同的表示,而且它们恰好使用了冲突的名称。有关引用,请参阅 protocol specification .在该 C++ API 中,error_message 参数对应于响应的“Status-Message”部分,error_details 参数对应于 grpc-status-details -bin 自定义元数据项。如 this comment 中所述目的是 error_details 参数将包含序列化的 google.rpc.Status 原型(prototype)消息。

在 Node API 中,details 值对应于响应的“Status-Message”部分(同样是 C++ 中的 error_message 参数)。 message 值只是一个聚合的用户可读字符串,它结合了状态代码、状态代码的人类可读名称和详细信息字符串。正如问题中提到的,grpc-status-details-bin 元数据项没有特殊的访问器,它只是在元数据值中。

关于c++ - gRPC 错误返回意外的详细信息字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55690764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com