Como gravar e responder mensagens do Pub/Sub

O Cloud Pub/Sub transmite mensagens assíncronas confiáveis, de muitos para muitos, entre os aplicativos. Os aplicativos do editor podem enviar mensagens para um tópico e outros aplicativos podem se inscrever nesse tópico 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 .NET.

Pré-requisitos

  • Siga as instruções em "Hello World!" para .NET no App Engine para configurar seu ambiente e projeto e entender como os aplicativos em .NET do App Engine são estruturados.
  • Anote e salve o ID 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 app de amostra

Copie os aplicativos de amostra para sua máquina local e navegue até o diretório 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 ID 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 exemplo usa a Biblioteca 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 pubsubMessage = new PubsubMessage()
        {
            Data = ByteString.CopyFromUtf8(messageForm.Message)
        };
        pubsubMessage.Attributes["token"] = _options.VerificationToken;
        _publisher.PublishAsync(pubsubMessage);
        model.PublishedMessage = messageForm.Message;
    }
    // Render the current list of messages.
    lock (s_lock) model.Messages = s_receivedMessages.ToArray();
    return View(model);
}

Como executar a amostra no local

Ao executar localmente, use o SDK do Cloud para fornecer autenticação de uso das APIs do Google Cloud. Se o ambiente tiver sido configurado conforme descrito emPré-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 o arquivo 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 seguintes comandos no 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 notification endpoint de push local. A amostra inclui o sample_message.json do arquivo.

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

Uma vez concluída a solicitação, será possível atualizar o localhost:5000 e ver 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 comando a seguir no diretório em que seu 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 Publish.

Linha de comando

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

Agora é possível acessar o aplicativo em https://[YOUR_PROJECT_ID].appspot.com. Use o formulário para enviar mensagens, mas não há garantias de 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