如何在 Google.Cloud.PubSub.V1 SubscriberServiceApiClientBuilder 中配置频道选项

Posted

技术标签:

【中文标题】如何在 Google.Cloud.PubSub.V1 SubscriberServiceApiClientBuilder 中配置频道选项【英文标题】:How to configure channel options in Google.Cloud.PubSub.V1 SubscriberServiceApiClientBuilder 【发布时间】:2021-05-14 10:06:53 【问题描述】:

在 Google.Cloud.PubSub.V1 版本 1.x.x 中,我使用的是 PublisherServiceApiClient.Create 并传入配置有目标、凭据和 ChannelOptions 的“Channel”对象。 ChannelOptions 是 grpc.max_receive_message_length,然后是 grpc.max_send_message_length。

根据文档 (https://googleapis.github.io/google-cloud-dotnet/docs/Google.Cloud.PubSub.V1/api/Google.Cloud.PubSub.V1.SubscriberServiceApiClient.html#Google_Cloud_PubSub_V1_SubscriberServiceApiClient_Create),您必须使用 SubscriberServiceApiClientBuilder(如果您不打算使用默认值:https://googleapis.github.io/google-cloud-dotnet/docs/Google.Cloud.PubSub.V1/api/Google.Cloud.PubSub.V1.SubscriberServiceApiClientBuilder.html)。

SubscriberServiceApiClientBuilder 允许您设置 ChannelCredentials 和 Endpoint,但我看不到设置 ChannelOptions 的方法。如何在 SubscriberServiceApiClientBuilder 中设置 ChannelOptions?

旧代码用于创建 SubScriberServiceApiClient:

SubscriberServiceApiClient.Create(channel); // channel is of type Channel

新代码用于创建 SubscriberServiceApiClient:

new SubscriberServiceApiClientBuilder

    ChannelCredentials = channelCredentials,
    Endpoint = endPoint,
.Build()

【问题讨论】:

【参考方案1】:

正如您所指出的,SubscriberServiceApiClient.Create() 已停止接受 grpccore::Channel 对象。但是您仍然可以通过直接创建底层SubscriberServiceApiClientImpl 对象来创建客户端。

更详细地说,SubscriberServiceApiClientImpl 接收一个Subscriber.SubscriberClient 对象,该对象派生自您希望传入的channel 变量(grpccore::Channel 对象)。您可以查看old implementation 了解如何grpcClient 已创建。

总而言之,您的代码可能如下所示:

// Assuming `settings` (a `SubscriberServiceApiSettings` object) is
//     created (default to null)
// Assuming you’re created a `channel` object that is a `grpccore::Channel`
gax::GaxPreconditions.CheckNotNull(channel, nameof(channel));
grpccore::CallInvoker callInvoker = new grpccore::DefaultCallInvoker(channel);
gax::GaxPreconditions.CheckNotNull(callInvoker, nameof(callInvoker));
grpccore::Interceptors.Interceptor interceptor = settings?.Interceptor;
if (interceptor != null) 
    callInvoker = grpccore::Interceptors.CallInvokerExtensions.Intercept(
        callInvoker, interceptor);

Subscriber.SubscriberClient grpcClient = new Subscriber.SubscriberClient(callInvoker);
SubscriberServiceApiClient client = new SubscriberServiceApiClientImpl(
    grpcClient, settings);

【讨论】:

以上是关于如何在 Google.Cloud.PubSub.V1 SubscriberServiceApiClientBuilder 中配置频道选项的主要内容,如果未能解决你的问题,请参考以下文章

如何在表单提交后保留文本(如何在提交后不删除自身?)

如何在异步任务中调用意图?或者如何在 onPostExecute 中开始新的活动?

在 Avkit 中如何使用这三行代码,以及如何将音乐静音”

如何在 JDBC 中启动事务?

如何在 Fragment 中调用 OnActivityResult 以及它是如何工作的?

如何使用 Firebase 在 Web 上托管 Flutter?它的效果如何?