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

时间:2016-09-28 17:09:31

标签: java grpc grpc-java

我们的通讯超出了邮件大小的默认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

  

在“频道/服务器”构建器上设置maxMessageSize()。

但是,在尝试在我们的代码库中实现修复时,我不清楚如何执行此操作,因为并非所有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)。

问题:

  • 如何使用ManagedChannel
  • 增加邮件限制
  • 如果ManagedChannel无法实现,我如何重写代码以使用支持增加默认限制的其他渠道实施?

1 个答案:

答案 0 :(得分:3)

修改:您现在可以直接从ManagedChannelBuilder增加限制。

今天,你不能增加ManagedChannelBuilder的限制;您被迫指定要使用的传输实现。

因此大多数用户会明确使用NettyChannelBuilder,Android用户会使用OkHttpChannelBuilder

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

我已创建GitHub issue 2307来跟踪此内容。