Como gravar e responder a mensagens do Pub/Sub

O Cloud Pub/Sub fornece mensagens assíncronas confiáveis de muitos para muitos entre aplicativos. Os aplicativos do editor podem enviar mensagens para um tópico, e outros aplicativos podem se inscrever nele para receber as mensagens.

Neste documento, descrevemos como usar a Biblioteca de cliente do Google Cloud para enviar e receber mensagens do Cloud Pub/Sub em um aplicativo em execução no ambiente flexível.

Pré-requisitos

  • Siga as instruções em "Hello, World!" para .NET no App Engine para configurar o ambiente e o projeto, e para entender como os aplicativos .NET do App Engine são estruturados.
  • Anote e guarde o código do projeto. Você precisará dele para executar o aplicativo de amostra descrito neste documento.
Para fazer o download de credenciais do Console do Google Cloud Platform a fim de criar uma conta de serviço e incluir a respectiva chave no aplicativo, siga a etapa 3 descrita no GitHub. Ativar Google Cloud Pub/Sub API.

Ativar a API

Como clonar o aplicativo de amostra

Copie os aplicativos de amostra para sua máquina local e navegue até o diretório do pubsub:

git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples
cd dotnet-docs-samples/appengine/flexible/pubsub

Como criar um tópico e uma assinatura

Crie um tópico e uma assinatura. Isso inclui especificar o endpoint que receberá as solicitações do Pub/Sub:

gcloud pubsub topics create YOUR_TOPIC
gcloud pubsub subscriptions create YOUR_SUBSCRIPTION `
    --topic YOUR_TOPIC `
    --push-endpoint `
    https://YOUR_PROJECT_ID.appspot.com/pubsub/push?token=YOUR_SECRET_TOKEN `
    --ack-deadline 10

Como definir variáveis de ambiente

Edite o arquivo appsettings.json para definir o código do projeto:

{
  "Pubsub": {
    "ProjectId": "your-project-id",
    "VerificationToken": "your-secret-token",
    "TopicId": "your-topic",
    "SubscriptionId": "your-subscription"
  },

  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  }
}

Revisão de código

O aplicativo de amostra usa as bibliotecas de cliente do Google Cloud.

[HttpGet]
[HttpPost]
public IActionResult Index(MessageForm messageForm)
{
    var model = new MessageList();
    if (!_options.HasGoodProjectId())
    {
        model.MissingProjectId = true;
        return View(model);
    }
    if (!string.IsNullOrEmpty(messageForm.Message))
    {
        // Publish the message.
        var topicName = new TopicName(_options.ProjectId,
            _options.TopicId);
        lock(s_lock) CreateTopicAndSubscriptionOnce(_publisher, topicName);
        var pubsubMessage = new PubsubMessage()
        {
            Data = ByteString.CopyFromUtf8(messageForm.Message)
        };
        pubsubMessage.Attributes["token"] = _options.VerificationToken;
        _publisher.Publish(topicName, new[] { pubsubMessage });
        model.PublishedMessage = messageForm.Message;
    }
    // Render the current list of messages.
    lock (s_lock) model.Messages = s_receivedMessages.ToArray();
    return View(model);
}

Executar a amostra no local

Com o SDK do Cloud em execução no local, é possível fornecer autenticação para usar as APIs do Google Cloud. Se o ambiente tiver sido configurado conforme descrito em Pré-requisitos, o comando gcloud init, que fornece essa autenticação, já terá sido executado.

Para executar o aplicativo de amostra localmente, siga estas etapas:

Visual Studio

  1. Abra dotnet-docs-samples\appengine\flexible\AppEngineFlex.sln com o Visual Studio.

  2. No "Gerenciador de soluções", clique com o botão direito do mouse em Pubsub e selecione Depurar > Iniciar nova instância.

Linha de comando

  1. Execute os comandos a seguir a partir do diretório dotnet-docs-samples\appengine\flexible\Pubsub:

    dotnet restore
    dotnet run
    
  2. No navegador da Web, digite este endereço:

    http://localhost:5000/
    

Como simular notificações push

Pelo aplicativo, é possível enviar mensagens localmente, mas não é possível receber mensagens push localmente. É possível simular uma mensagem de push com uma solicitação HTTP para o ponto de extremidade da notificação local. A amostra inclui o arquivo sample_message.json.

Para enviar uma solicitação HTTP POST:

Get-Content -Raw .\sample_message.json | Invoke-WebRequest -Uri
http://localhost:5000/Push?token=your-secret-token -Method POST -ContentType
'text/json' -OutFile out.txt

Após a conclusão da solicitação, atualize localhost:5000 e veja a mensagem na lista de mensagens recebidas.

Como executar no App Engine

Para implantar o aplicativo de demonstração no App Engine usando a ferramenta de linha de comando gcloud, execute o seguinte comando no diretório em que o arquivo app.yaml está localizado:

Visual Studio

Para implantar o aplicativo Hello World:

  1. Abra dotnet-docs-samples\appengine\flexible\AppEngineFlex.sln com o Visual Studio.
  2. No "Gerenciador de soluções", clique com o botão direito do mouse em Pubsub e selecione Publicar no Google Cloud...
  3. Clique em App Engine Flex.
  4. Clique em Publicar.

Linha de comando

Execute os comandos a seguir a partir do diretório dotnet-docs-samples\appengine\flexible\Pubsub:
dotnet restore
dotnet publish
cd bin\Debug\netcoreapp2.1\publish
gcloud app deploy

Agora, acesse o aplicativo em https://[YOUR_PROJECT_ID].appspot.com. Você pode usar o formulário para enviar mensagens. No entanto, não há garantias sobre qual instância do seu aplicativo receberá a notificação. É possível enviar várias mensagens e atualizar a página para ver a mensagem recebida.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Ambiente flexível do App Engine para documentos .NET