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. {% dynamic if "no_credentials" in setvar.task_params %}{% dynamic setvar credential_type %}NO_AUTH{% dynamic endsetvar %}{% dynamic if not setvar.redirect_url %}{% dynamic setvar redirect_url %}https://console.cloud.google.com{% dynamic endsetvar %}{% dynamic endif %}{% dynamic endif %}{% dynamic if setvar.in_henhouse_no_auth_whitelist %}{% dynamic if not setvar.credential_type %}{% dynamic setvar credential_type %}NO_AUTH{% dynamic endsetvar %}{% dynamic endif %}{% dynamic elif setvar.in_henhouse_service_account_whitelist %}{% dynamic if not setvar.credential_type %}{% dynamic setvar credential_type %}SERVICE_ACCOUNT{% dynamic endsetvar %}{% dynamic endif %}{% dynamic endif %}{% dynamic if not setvar.service_account_roles and setvar.credential_type == "SERVICE_ACCOUNT" %}{% dynamic setvar service_account_roles %}{% dynamic endsetvar %}{% dynamic endif %}{% dynamic setvar console %}{% dynamic if "no_steps" not in setvar.task_params %}
  • {% dynamic endif %}{% dynamic if setvar.api_list %}{% dynamic if setvar.in_henhouse_no_auth_whitelist or setvar.in_henhouse_service_account_whitelist %} Configure um projeto do Console do GCP.

    Configurar um projeto

    Clique para:

    • criar ou selecionar um projeto;
    • ativar {% dynamic if setvar.api_names %}{% dynamic print setvar.api_names %}{% dynamic else %}obrigatória{% dynamic endif %}{% dynamic if "," in setvar.api_list %} APIs{% dynamic elif "API" in setvar.api_names %}{% dynamic else %} API{% dynamic endif %} para o projeto;
    • {% dynamic if setvar.credential_type == 'SERVICE_ACCOUNT' %}
    • criar uma conta de serviço;
    • fazer o download de uma chave privada como JSON.
    • {% dynamic endif %}

    É possível ver e gerenciar esses recursos a qualquer momento no Console do GCP.

    {% dynamic else %}{% dynamic if "no_text" not in setvar.task_params %} Ativar {% dynamic if setvar.api_names %}{% dynamic print setvar.api_names %}{% dynamic else %}obrigatória{% dynamic endif %}{% dynamic if "," in setvar.api_list %} APIs{% dynamic elif "API" in setvar.api_names %}{% dynamic else %} API{% dynamic endif %}. {% dynamic endif %}

    Ativar {% dynamic if "," in setvar.api_list %} as APIs{% dynamic else %} a API{% dynamic endif %}

    {% dynamic endif %}{% dynamic endif %}{% dynamic if "no_steps" not in setvar.task_params %}
  • {% dynamic endif %}{% dynamic endsetvar %}{% dynamic print setvar.console %}

    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