微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Micronaut 应用程序中截断的 protobufs

如何解决Micronaut 应用程序中截断的 protobufs

我有一个 Micronaut(版本 2.1.4)应用程序,它通过 HTTP 使用 Protobuf 消息。

这是控制器示例:

@Post
@Consumes(ProtobufferCodec.PROTOBUFFER_ENCODED)
@Produces(ProtobufferCodec.PROTOBUFFER_ENCODED)
public HttpResponse<MyResponse> ingestData(@Body byte[] body)
  throws InvalidProtocolBufferException {

        MyProto myOjbect = MyProto.parseFrom(body);
        MyResponse responseBody = myService.processData(body);
        return HttpResponse.ok(responseBody);
}

我的问题是,仅对于某些请求(并非所有请求),行 MyProto.parseFrom(body) 引发异常

om.google.protobuf.InvalidProtocolBufferException: While parsing a protocol message,the input ended unexpectedly in the middle of a field.  This Could mean either that the input has been truncated or that an embedded message misreported its own length.
    at com.google.protobuf.InvalidProtocolBufferException.truncatedMessage(InvalidProtocolBufferException.java:84)
    at com.google.protobuf.CodedInputStream$ArrayDecoder.pushLimit(CodedInputStream.java:1189)
    at com.google.protobuf.CodedInputStream$ArrayDecoder.readMessage(CodedInputStream.java:886)
    ...
    at com.google.protobuf.AbstractParser.parsePartialFrom(AbstractParser.java:158)
    at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:191)
    at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:203)
    at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:208)
    at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:48)
....

而且例外是正确的,正文 (byte[]) 被截断了(不完整)并且长度与之前的不同,我是通过 CURL 发送的。我还验证了 Content-Length 标头中的值与 byte[] (protobuf) 的长度不同,因为 byte[] 的长度更小。

我无法重现此问题,仅在生产中发生。

有什么想法吗?

“感情”:

  • 它发生在大请求中
  • 也许 Netty 有一些参数,即使请求的大小允许,它也会被截断、切碎或类似,从而影响 protobuf (byte[])
  • 性能(内存)问题?

更多信息:

  • io.micronaut:micronaut-bom:2.1.4
  • io.micronaut:micronaut-http-server-netty
  • io.micronaut.grpc:micronaut-protobuff-support:1.0.1

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。