【问题标题】:Is there any way to use rich error model for grpc service in armeria?有没有办法在 armeria 中为 grpc 服务使用丰富的错误模型?
【发布时间】:2021-04-26 12:41:10
【问题描述】:

我将 Armeria 1.3.0 和 protobuf 用于 gRPC 服务。 我在处理异常时尝试使用rich error model,但我认为 Armeria 似乎只支持标准错误模型。

如何在 Armeria 中使用丰富的错误模型?我想在发生异常时返回自定义错误代码/消息以及有关错误的更多详细信息。

提前感谢您的回答。

【问题讨论】:

  • 嗨!什么是富模型?
  • 没错。根据此链接stackoverflow.com/questions/48748745/…,有一些使用google protobuf的示例
  • 是的,您是否尝试在Metadata 中指定此类信息?我认为 Armeria 应该是可行的。
  • 我尝试使用元数据,但只有在使用 responseObserver.onError 方法而不是 GrpcService.Builder 的 exceptionMapping 时才有可能。 exceptionMapping 方法只返回 Status,所以我很棘手地尝试了这样,return Status.INTERNAL.asRuntimeException(metadata).getStatus() 但是 metadata.get 方法在 grpc 客户端返回 null。

标签: exception grpc armeria


【解决方案1】:

在 Armeria 1.5.0 之前,无法将任意 gRPC Metadata 附加到 gRPC 错误响应,但您将能够从下一个小更新 (1.6.0) 开始这样做:

GrpcService
    .builder()
    .addExceptionMapping(MyException.class, (cause, metadata) -> {
        metadata.put(MY_KEY, myValue)
        return Status.XXX.withDescription("...");
    })
    ...

详情请见https://github.com/line/armeria/pull/3329

【讨论】:

    猜你喜欢
    • 2018-07-22
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 2021-01-13
    • 2019-10-14
    相关资源
    最近更新 更多