如何解决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 举报,一经查实,本站将立刻删除。