c++ - GRPC 非法标头值
问题描述
我试图找出我的应用程序中的一个错误,但我有点不知所措。
调用服务时,我的客户端在收到带有“非法标头值”断言错误的响应时出现故障。
我正在使用开放遥测并将跨度上下文添加到我的客户端上下文中,如他们的示例中所示。
// inject current context to grpc metadata
auto current_ctx = opentelemetry::context::RuntimeContext::GetCurrent();
GrpcClientCarrier carrier(context);
auto prop = opentelemetry::context::propagation::GlobalTextMapPropagator::GetGlobalPropagator();
prop->Inject(carrier, current_ctx);
跨度上下文已添加到我的所有服务中,但只有一个因此错误而失败。
我在那里没有什么不同。
看起来 span-id (00-8703a0beea6ff515a32967c40dfb41fb-49b3c2fe1ac932a9-01) 在元数据字节数组中。
如果我删除跨度上下文,它会起作用。
raise 0x00007ffff67b918b
abort 0x00007ffff6798859
grpc::CoreCodegen::assert_fail(char const*, char const*, int) 0x0000555555769737
grpc::internal::CallOpSet<grpc::internal::CallOpSendInitialMetadata, grpc::internal::CallOpSendMessage, grpc::internal::CallOpRecvInitialMetadata, grpc::internal::CallOpRecvMessage<google::protobuf::MessageLite>, grpc::internal::CallOpClientSendClose, grpc::internal::CallOpClientRecvStatus>::ContinueFillOpsAfterInterception() 0x0000555555dd5c3b
grpc::internal::CallOpSet<grpc::internal::CallOpSendInitialMetadata, grpc::internal::CallOpSendMessage, grpc::internal::CallOpRecvInitialMetadata, grpc::internal::CallOpRecvMessage<google::protobuf::MessageLite>, grpc::internal::CallOpClientSendClose, grpc::internal::CallOpClientRecvStatus>::FillOps(grpc::internal::Call*) 0x0000555555dd5971
grpc::Channel::PerformOpsOnCall(grpc::internal::CallOpSetInterface*, grpc::internal::Call*) 0x00005555557a2482
grpc::internal::Call::PerformOps(grpc::internal::CallOpSetInterface*) 0x00005555557847e7
grpc::internal::BlockingUnaryCallImpl<google::protobuf::MessageLite, google::protobuf::MessageLite>::BlockingUnaryCallImpl(grpc::ChannelInterface*, grpc::internal::RpcMethod const&, grpc::ClientContext*, google::protobuf::MessageLite const&, google::protobuf::MessageLite*) 0x0000555555dd124b
grpc::internal::BlockingUnaryCall<grpc::station::StationId, grpc::station::DefaultResponse, google::protobuf::MessageLite, google::protobuf::MessageLite> client_unary_call.h:45
E1014 11:47:58.117958972 2120287 call.cc:926] validate_metadata: {"created":"@1634204878.117940102","description":"Illegal header value","file":"/builds/grpc/src/core/lib/surface/validate_metadata.cc","file_line":51,"offset":55,"raw_bytes":"30 30 2d 38 37 30 33 61 30 62 65 65 61 36 66 66 35 31 35 61 33 32 39 36 37 63 34 30 64 66 62 34 31 66 62 2d 34 39 62 33 63 32 66 65 31 61 63 39 33 32 61 39 2d 30 31 7f '00-8703a0beea6ff515a32967c40dfb41fb-49b3c2fe1ac932a9-01.'\u0000"}
E1014 11:47:58.117989343 2120287 call_op_set.h:980] assertion failed: false
解决方案
推荐阅读
- typescript - 打字稿类型的可选链接
- reverse-proxy - 从 Thorntail 到 Quarkus 的代理地址转发属性
- python - 使用 Python3.9 和 BeautifulSoup 4 进行 JSONDecodeError 网页抓取
- c++ - 在 C++ 中使用圆括号和方括号创建动态数组的区别
- java - maven-dependency-plugin 未显示测试范围的依赖项
- javascript - 如果类组件中的条件发生反应,如何在内部调用函数?
- vba - 如何进行逐行 COUNTIF,按日期分组
- python-3.x - 带有tqdm进度条的python多处理中的笛卡尔积
- javascript - 在javascript中,如何将数组作为数组插入数组中?
- java - 如果在 Java springboot 中与 JPA 进行一对一映射,我会得到空值