Как настроить параметры канала в Google.Облако.PubSub.V1 SubscriberServiceApiClientBuilder

#c# #google-cloud-pubsub

#c# #google-cloud-pubsub

Вопрос:

В Google.Облако.Версия PubSub.V1 1.x.x, я использовал PublisherServiceApiClient.Создайте и передайте объект «Channel», который был настроен с помощью target, учетных данных и параметров канала. Параметрами канала являются grpc.max_receive_message_length, а затем grpc.max_send_message_length.

Согласно документации (https://googleapis.github.io/google-cloud-dotnet/docs/Google .Облако.PubSub.V1/api/Google.Облако.PubSub.V1.SubscriberServiceApiClient.html#Google_Cloud_PubSub_V1_SubscriberServiceApiClient_Create) вы должны использовать SubscriberServiceApiClientBuilder (если вы не собираетесь использовать значения по умолчанию: https://googleapis.github.io/google-cloud-dotnet/docs/Google .Облако.PubSub.V1/api/Google.Облако.PubSub.V1.SubscriberServiceApiClientBuilder.html ).

SubscriberServiceApiClientBuilder позволяет устанавливать параметры каналов и конечную точку, но я не вижу способа установить параметры каналов. Как мне установить параметры канала в SubscriberServiceApiClientBuilder?

Старый код для создания 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 объекта), которую вы хотите передать. Вы можете проверить старую реализацию для того, как 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);