java-grpc:如何增加 ManagedChannel 中的消息大小限制?

java-grpc: How to increase the message size limit in a ManagedChannel?

我们的通信超过了消息大小的默认 grpc-java 限制:

Caused by: io.grpc.StatusRuntimeException: INTERNAL:
Frame size 4555602 exceeds maximum: 4194304.
If this is normal, increase the maxMessageSize
in the channel/server builder

这个限制可以提高,见https://github.com/grpc/grpc-java/issues/917:

Set maxMessageSize() on the Channel/Server builder.

然而,当尝试在我们的代码库中实施修复时,我并不清楚该怎么做,因为并非所有 Channel 实施都有 maxMessageSize 方法。

我们的代码使用了ManagedChannel。设置代码如下所示:

ManagedChannel channel = 
   ManagedChannelBuilder.forAddress(rpcHost, grpcPort)
                        .usePlaintext(true).build();

CatalogGrpcServiceGrpc.CatalogGrpcServiceBlockingStub stub =
    CatalogGrpcServiceGrpc.newBlockingStub(channel);
CatalogRetrieverGrpcServiceAdapter grpcServiceAdapter =
    new CatalogRetrieverGrpcServiceAdapter(
            stub, metricRegistry);

也许我遗漏了什么,但我看不出如何增加 ManagedChannel 的最大大小。只有 OkHttpChannelBuilder 有 (OkHttpChannelBuilder#maxMessageSize)。

问题:

编辑:您现在可以直接从 ManagedChannelBuilder 增加限制。

今天,您无法提高 ManagedChannelBuilder 的限制;您必须指定要使用的传输实现。

所以大多数用户会明确使用 NettyChannelBuilder,而 Android 用户会使用 OkHttpChannelBuilder:

ManagedChannel channel = 
   NettyChannelBuilder.forAddress(rpcHost, grpcPort)
                        .usePlaintext(true).build();

我创建了 GitHub issue 2307 来跟踪这个。