Scrittura di messaggi Cloud Pub/Sub e risposta a tali messaggi

ID regione

REGION_ID è un codice abbreviato assegnato da Google in base all'area geografica selezionata al momento della creazione dell'app. Il codice non corrisponde a un paese o a una provincia, anche se alcuni ID di area geografica potrebbero essere simili ai codici di paese e provincia di uso comune. Per le app create dopo febbraio 2020, REGION_ID.r è incluso negli URL di App Engine. Per le app esistenti create prima di questa data, l'ID area geografica è facoltativo nell'URL.

Scopri di più sugli ID dell'area geografica.

Pub/Sub fornisce messaggistica asincrona many-to-many affidabile tra le applicazioni. Le applicazioni dei publisher possono inviare messaggi a un argomento, mentre le altre applicazioni possono iscriversi all'argomento per ricevere i messaggi.

Questo documento descrive come utilizzare la libreria client di Cloud per inviare e ricevere messaggi Pub/Sub in un'applicazione .NET.

Prerequisiti

Clonazione dell'app di esempio

Copia le app di esempio nella tua macchina locale e accedi alla directory pubsub:

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

Creazione di un argomento e di una sottoscrizione

Crea un argomento e una sottoscrizione, che includono la specifica dell'endpoint a cui il server Pub/Sub deve inviare richieste:

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

Imposta le variabili di ambiente

Modifica il file appsettings.json per impostare l'ID progetto:

{
  "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"
    }
  }
}

Revisione del codice

L'app di esempio utilizza la libreria client di 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);
}

Esecuzione dell'esempio in locale

Durante l'esecuzione in locale, puoi utilizzare l'interfaccia a riga di comando di Google Cloud per fornire l'autenticazione per utilizzare le API Google Cloud. Supponendo che tu abbia configurato l'ambiente come descritto nei prerequisiti, hai già eseguito il comando gcloud init, che fornisce questa autenticazione.

Per eseguire l'app di esempio localmente:

Studio visivo

  1. Apri dotnet-docs-samples\appengine\flexible\AppEngineFlex.sln con Visual Studio.

  2. In Esplora soluzioni, fai clic con il pulsante destro del mouse su Pubsub e scegli Debug > Avvia nuova istanza.

Riga di comando

  1. Esegui i comandi indicati dalla directory dotnet-docs-samples\appengine\flexible\Pubsub:

    dotnet restore
    dotnet run
    
  2. Nel browser web, inserisci l'indirizzo seguente:

    http://localhost:5000/
    

Simulazione di notifiche push

L'applicazione può inviare messaggi localmente, ma non è in grado di ricevere messaggi push localmente. Tuttavia, puoi simulare un messaggio push inviando una richiesta HTTP all'endpoint della notifica push locale. Nel file di esempio è incluso sample_message.json.

Per inviare una richiesta 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

Al termine della richiesta, puoi aggiornare localhost:5000 e visualizzare il messaggio nell'elenco di messaggi ricevuti.

Esecuzione in App Engine

Per eseguire il deployment dell'app demo in App Engine utilizzando lo strumento a riga di comando gcloud, esegui il comando seguente dalla directory in cui si trova il file app.yaml:

Studio visivo

Per eseguire il deployment dell'app Hello World:

  1. Apri dotnet-docs-samples\appengine\flexible\AppEngineFlex.sln con Visual Studio.
  2. In Esplora soluzioni, fai clic con il pulsante destro del mouse su Pubsub e scegli Pubblica su Google Cloud...
  3. Fai clic su Flex di App Engine.
  4. Fai clic su Pubblica.

Riga di comando

Esegui i seguenti comandi dalla directory dotnet-docs-samples\appengine\flexible\Pubsub:
dotnet restore
dotnet publish
cd bin\Debug\netcoreapp2.1\publish
gcloud app deploy

Ora puoi accedere all'applicazione in https://PROJECT_ID.REGION_ID.r.appspot.com. Puoi utilizzare il modulo per inviare messaggi, ma non possiamo garantire quale istanza della tua applicazione riceverà la notifica. Puoi inviare più messaggi e aggiornare la pagina per visualizzare il messaggio ricevuto.