Java Micronaut应用中的截断协议

Java Micronaut应用中的截断协议,java,microservices,protocol-buffers,netty,micronaut,Java,Microservices,Protocol Buffers,Netty,Micronaut,我有一个Micronaut(版本2.1.4)应用程序,它通过HTTP使用Protobuf消息 以下是控制器示例: @Post @Consumes(ProtobufferCodec.PROTOBUFFER_ENCODED) @Produces(ProtobufferCodec.PROTOBUFFER_ENCODED) public HttpResponse<MyResponse> ingestData(@Body byte[] body) throws InvalidProtoco

我有一个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);
}
例外是正确的,正文(字节[])被截断(不完整),长度与我通过CURL发送的正文不同。我还验证了
内容长度
标题中的值与
字节[]
(protobuf)的长度不同,因为
字节[]
的长度更小

我无法复制这个问题,只能在生产中发生

有什么想法吗

“感情”:

  • 大的请求也会发生这种情况
  • 可能Netty有一些参数,即使请求的大小允许,它也会被截断、切碎或类似,从而影响protobuf(字节[])
  • 性能(内存)问题
更多信息:

  • io.micronaut:micronaut物料清单:2.1.4
  • io.micronaut:micronaut http服务器网络
  • io.micronaut.grpc:micronaut protobuff支持:1.0.1

Netty确实有请求正文的默认最大长度——在Spring应用程序中有一次这样做。不过我对micronaut一无所知(也许请求是“chunked”(@Rody),但在这种情况下,我应该得到一个错误、警告或某种异常吗?或者Netty只是剪切/截断了主体?我建议安装“Charles Proxy”。我个人使用它已经多年了。它对于调试这类事情非常有用。它是一个代理服务器,您可以以一种非常清晰和简单的方式查看所有请求和响应。您还可以编辑和重播请求,这使得修复问题变得更加容易。@Lobo您使用反向代理吗?您还可以提供更多详细信息吗在内容长度上,此操作失败?(我知道您说过您无法复制此内容,但如果您能够获得一个日志,其中说明
内容长度>字节[]
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)
....