Google Cloud PubSub V1 с использованием эмулятора GCloud - PullRequest
0 голосов
/ 09 октября 2018

Я борюсь с Google Docs за настройку Cloud PubSub с .NET с помощью эмулятора PubSub.

https://cloud.google.com/dotnet/docs/getting-started/using-pub-sub

https://cloud.google.com/pubsub/docs/publisher

https://cloud.google.com/pubsub/docs/emulator

Исходя из опыта работы с Rails, мне поручено внедрить Cloud PubSub для продукта .NET, запустив наше облако Google на .NET Core, чтобы позволить ему публиковать.

Google::Cloud::Pubsub.new(project: project_id, emulator_host: emulator_host)

Из документации, использующей .NET, я продолжаю возвращаться к следующему:

PublisherServiceApiClient publisherClient = PublisherServiceApiClient.Create();
PublisherClient publisher = PublisherClient.Create(...)

Однако библиотека, используемая из документов Google.Cloud.PubSub.V1 -Pre , не содержит определения.

'PublisherClient' does not contain a definition for 'Create',

Вместо этого я получаю CreateAsync, который принимает TopicName, PublisherClient.ClientCreationSettings и PublisherClient.Settings.

https://googleapis.github.io/google-cloud-dotnet/docs/Google.Cloud.PubSub.V1/api/Google.Cloud.PubSub.V1.PublisherClient.html

Я заметил, что PublisherServiceApiClient можетВозьмите Channel, но я не совсем понимаю, как это сделать.

В заключение нужно ответить на вопрос: как в настоящее время реализовать Cloud PubSub с .NET для в облаке, а затем локально с помощью эмулятора??Кроме того, я использую не ту библиотеку или не те документы?

Буду очень признателен за любые предложения, указания или советы.

Ответы [ 2 ]

0 голосов
/ 11 июня 2019

Чтобы подключить PublisherClient к локальному эмулятору, необходимо передать пользовательские ServiceEndpoint и ChannelCredentials на CreateAsync:

var serviceEndpoint = new ServiceEndpoint(theEmulatorHost, theEmulatorPort);

var publisherClient = await PublisherClient.CreateAsync(
    topicName,
    new PublisherClient.ClientCreationSettings(credentials: ChannelCredentials.Insecure, serviceEndpoint: serviceEndpoint));

Чтобы переключиться на настоящий PubSub, просто оставьтепрочь ClientCreationSettings.

0 голосов
/ 10 октября 2018

Мне удалось найти решение, которым я доволен.

Вместо использования PublisherClient я пошел использовать только PublisherServiceApiClient.

emulatorAddr = Environment.GetEnvironmentVariable("PUBSUB_EMULATOR_HOST");
if (emulatorAddr != null)
{
    channel = new Channel(emulatorAddr, ChannelCredentials.Insecure);
    pub = PublisherServiceApiClient.Create(channel);
}
else
{
    pub = PublisherServiceApiClient.Create();
}

Что означало публикациюбыл немного более сложным, чем отправка строки в PublisherClient, но в целом не так уж и плохо.

PubsubMessage msg = new PubsubMessage
{
    Data = ByteString.CopyFromUtf8(JsonConvert.SerializeObject(payload))
};

pub.PublishAsync(topic, new[]{ msg });

Если проект запущен в Google Compute Engine, он будет иметь учетные данные по умолчанию.В противном случае, если вы запускаете эмулятор локально или в докере, вы можете определить PUBSUB_EMULATOR_HOST.

Что действительно помогло, так это https://googleapis.github.io/google-cloud-dotnet/docs/Google.Cloud.PubSub.V1/index.html

...