drnf09037160
2017-08-02 08:13
浏览 544
已采纳

gRPC服务器错误处理程序golang

I want know about good practices with golang and gRPC and protobuf.

I am implementing the following gRPC service

service MyService {
   rpc dosomethink(model.MyModel) returns (model.Model) {
     option (google.api.http) = { post: "/my/path" body: "" };
   }
}

I compiled the protobufs. In fact, the protobuf give us a httpproxy from http to grpc.

The code to implement this service:

import "google.golang.org/grpc/status"

func (Abcd) Dosomethink(c context.Context, sessionRequest *model.MyModel) (*model.Model, error) {

   return nil, status.New(400,"Default error message for 400")
}

I want a 400 http error (in the http proxy) with the message "Default error message for 400", the message works, but the http error always is 500.

Do you know any post or doc about this?

图片转代码服务由CSDN问答提供 功能建议

我想了解golang和gRPC和protobuf的良好做法。

我正在实现以下gRPC服务

  service MyService {
 rpc dosomethink(model.MyModel)返回(model.Model){
选项(google.api.http)  = {post:“ / my / path” body:“”}; 
} 
} 
   
 
 

我编译了protobuf。 实际上,protobuf给了我们从http到grpc的httpproxy。

实现此服务的代码:

  import“ google.golang.org/grpc/status"

func(Abcd  )Dosomethink(c context.Context,sessionRequest * model.MyModel)(* model.Model,error){
 
返回nil,status.New(400,“ 400的默认错误消息”)
} 
 <  / code>  
 
 

我想要一个带有消息“ 400的默认错误消息”的400 http错误(在http代理中),该消息有效,但是http错误始终为500。 / p>

您知道与此相关的任何帖子或文档吗?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • dongping4901 2017-08-02 10:12
    已采纳

    You need to return empty model.Model object in order for protobufs to be able to properly serialise the message.

    Try

    import "google.golang.org/grpc/status"
    
    func (Abcd) Dosomethink(c context.Context, sessionRequest *model.MyModel) (*model.Model, error) {
    
       return &model.Model{}, status.New(400,"Default error message for 400")
    }
    
    点赞 打赏 评论
  • dtrgqjcd877528 2019-01-25 09:23

    Error Handler:

    "google.golang.org/grpc/codes"
    "google.golang.org/grpc/status"
    
    return data, status.Errorf(
                codes.InvalidArgument,
                fmt.Sprintf("Your message", req.data),
            )
    

    For need more info about the error handling take a look below links.

    https://grpc.io/docs/guides/error.html

    http://avi.im/grpc-errors/

    点赞 打赏 评论

相关推荐 更多相似问题