大佬教程收集整理的这篇文章主要介绍了将 gRPC 拦截器中的请求转换为相关的 protobuf 消息,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个 UnaryServerInterceptor
接收 req
Interface{}
。此 req
可以是我的任何一条消息,但在这种情况下,我的所有消息都有一个共同的 @H_433_3@metadata 子消息。
Protobuf 定义(示例)
message ClIEntMeta {
String info = 1;
}
message Pingrequest {
ClIEntMeta Metadata = 1;
}
message Otherrequest {
ClIEntMeta Metadata = 1;
}
service Blah {
rpc Ping (Pingrequest) returns (PingResponsE) {}
rpc Other (Otherrequest) returns (OtherResponses) {}
}
拦截器
func (i *authInterceptor) unary() grpc.UnaryServerInterceptor {
return func(
ctx context.Context,req interface{},info *grpc.UnaryServerInfo,handler grpc.UnaryHandler,) (interface{},error) {
log.Info().Msgf("interceptor: %s",info.FullMethod)
}
}
我需要在我的拦截器中访问消息 @H_433_3@metadata 的属性。问题是我不知道它是哪条消息,所以我不能只是投射它。我有几条不同的消息,但它们都有 @H_433_3@metadata 共同点。
解决这个问题的最佳方法是什么?
protoc
代应该为这两种类型生成一个名为 GetMetadata
的方法。您可以使用类型断言检查传入消息是否实现了接口(有关详细信息,请参阅tour of go),然后调用该方法以获取元数据。
type HasMetadata interface {
GetMetadata() *ClientMeta
}
在处理消息的函数中,做这样的事情
if m,ok := req.(HasMetadata); ok {
return m.GetMetadata()
}
以上是大佬教程为你收集整理的将 gRPC 拦截器中的请求转换为相关的 protobuf 消息全部内容,希望文章能够帮你解决将 gRPC 拦截器中的请求转换为相关的 protobuf 消息所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。