Oefening: een wachtrijbericht verwerken

Voltooid

In deze oefening gaat u uw toepassing uitbreiden met een route die kan worden geactiveerd voor een bericht in een berichtenwachtrij.

Notitie

Voordat u met deze oefening begint, moet u ervoor zorgen dat u de Azurite-extensie hebt gedownload, Azure Storage Explorer hebt gedownload en Azure Functions Core Tools hebt gedownload.

Scaffold de app

Voor deze oefening beginnen we met een nieuwe Azure Functions-app. Maak een nieuwe map en plaats uzelf erin.

  1. Selecteer Opdrachtpalet weergeven>.

  2. Selecteer Azure Functions: Nieuw project maken.

  3. Selecteer een map, meestal uw huidige map.

  4. Selecteer aangepaste handler in Een taal selecteren.

  5. Selecteer HttpTrigger in Selecteer een sjabloon voor uw eerste functie.

  6. Geef de app een naam, zoals queueTrigger.

  7. Selecteer een autorisatieniveau van anoniem. U kunt dit later desgewenst wijzigen.

  8. Maak in de hoofdmap een bestand met de naam server.go. Uw project moet nu de volgende bestanden hebben:

    queueTrigger/
      function.json
    .funcignore
    .gitignore
    host.json
    local.settings.json
    proxies.json
    server.go 
    
  9. Ga naar het bestand function.json in de queueTrigger map. Zoek de eerste bindingsvermelding in het type element:

    {
       "authLevel": "anonymous",
       "type": "httpTrigger",
       "direction": "in",
       "name": "req",
       "methods": [
         "get",
         "post"
       ]
     }
    

    Wijzig die bindingsvermelding in deze configuratie:

    {
       "name": "queueItem",
       "type": "queueTrigger",
       "direction": "in",
       "queueName" : "items",
       "connection": "AzureWebJobsStorage"
    }
    

    In deze stap stelt u de name eigenschap in. U verwijst ernaar verderop in code. U hebt ook het triggertype gewijzigd in queueTrigger, waardoor het mogelijk is om naar wachtrijberichten te luisteren.

    De queueName waarde wijst naar een specifieke wachtrij. Wanneer u de emulator later uitvoert, maakt u een wachtrij met een dergelijke naam.

    Ten slotte hebt u een variabele in local.settings.json aangegeven die de verbindingsreeks in de wachtrij bevat.

De app maken

Op dit moment hebt u een app-skelet. U bent nu klaar om code toe te voegen waarmee binnenkomende wachtrijberichten kunnen worden verwerkt.

  1. Open het bestand server.go en voeg de volgende code toe:

    package main
    
    import (
      "encoding/json",
      "fmt"
      "io/ioutil"
      "log"
      "net/http"
      "os"
    )
    
    func queueHandler(w http.ResponseWriter, r *http.Request) {
    }
    
    func main() {
      customHandlerPort, exists := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT")
      if !exists {
        customHandlerPort = "8080"
      }
      mux := http.NewServeMux()
      mux.HandleFunc("/queueTrigger", queueHandler)
      fmt.Println("Go server Listening on: ", customHandlerPort)
      log.Fatal(http.ListenAndServe(":"+customHandlerPort, mux))
    }
    

    U hebt nu een route ingesteld op /queueTrigger.

  2. Zoek de importsectie en voeg de volgende structs toe:

    type InvokeRequest struct {
      Data     map[string]json.RawMessage
      Metadata map[string]interface{}
    }
    
  3. Zoek de queueHandler() methode en voeg deze op de volgende manier bij:

    func queueHandler(w http.ResponseWriter, r *http.Request) {
      var invokeRequest InvokeRequest
    
      d := json.NewDecoder(r.Body)
      d.Decode(&invokeRequest)
    
      var parsedMessage string
      json.Unmarshal(invokeRequest.Data["queueItem"], &parsedMessage)
    }
    

    De code leest eerst de hoofdtekst van de binnenkomende antwoordstroom en decodeert deze:

    var invokeRequest InvokeRequest
    
    d := json.NewDecoder(r.Body)
    d.Decode(&invokeRequest)
    

    Vervolgens wordt het bericht zelf uitgegraven met een aanroep naar Unmarshal():

    var parsedMessage string
    json.Unmarshal(invokeRequest.Data["queueItem"], &parsedMessage)
    

    Nu u het bericht hebt, gaan we het afdrukken.

  4. Voeg de volgende code toe:

    fmt.Println(parsedMessage) // your message
    

    Uw code is nu allemaal geschreven, maar u moet uw project configureren, zodat u het kunt testen.

  5. Zoek in het bestand host.json het defaultExecutablePath element en geef het een waarde van ./server.

    Notitie

    Voor Windows gebruikt u een waarde van .\server.exe.

  6. Bouw het bestand server.go door het uit te voeren go build in de hoofdmap van het project:

    go build server.go
    

De omgeving configureren

De volgende stap is het configureren van uw omgeving. Omdat u lokaal ontwikkelt, moet u deze zo instellen dat u met een geƫmuleerde berichtenwachtrij kunt praten.

  1. Zoek in het bestand local.settings.json een element in Values de aangeroepen naam AzureWebJobsStorage (of voeg het toe als het ontbreekt). Geef deze de waarde UseDevelopmentStorage=true. Uw JSON-vermelding moet er als volgt uitzien:

    "AzureWebJobsStorage" : "UseDevelopmentStorage=true"
    
  2. Start de Azurite-extensie door het opdrachtenpalet (Opdrachtenpalet weergeven>) te openen en vervolgens Azurite: Start Queue Service te selecteren.

    Notitie

    Met deze stap maakt u enkele lokale bestanden in uw project.

  3. Open Azure Storage Explorer. Aan de linkerkant is de inhoud van de emulator zichtbaar.

  4. Klik met de rechtermuisknop op het knooppunt Wachtrijen en selecteer de optie om een nieuwe wachtrij te maken. Geef deze de naamitems.

    Screenshot that shows the emulator in Azure Storage Explorer, with a new queue created.

    Notitie

    U kunt de gewenste naam aan de wachtrij toewijzen. U staat echter op het punt om uw function.json-bestand te configureren. Wat u de wachtrij hier ook noemt, moet naar function.json gaan.

  5. Zoek function.json onder de queueTrigger map. Zorg ervoor dat de bindings matrix de volgende vermelding heeft:

    {
       "name": "queueItem",
       "type": "queueTrigger",
       "direction": "in",
       "queueName" : "items",
       "connection": "AzureWebJobsStorage"
     }
    

    De queueName eigenschap heeft dezelfde naam als de wachtrij die u hebt gemaakt in Azure Storage Explorer. De connection eigenschap verwijst naar de waarde die u hebt ingesteld in local.settings.json.

    De name eigenschap heeft de waarde queueItem. Uw Go-code gebruikt deze waarde om het wachtrijbericht te parseren.

De app uitvoeren

Op dit moment is alles ingesteld. U hoeft alleen maar de app uit te voeren, Azure Storage Explorer te starten en een wachtrijbericht te maken. Uw code moet dat bericht kunnen gebruiken.

  1. Voer vanuit een terminal de func start opdracht uit in de hoofdmap van het project:

    func start
    
  2. Open in Visual Studio Code het opdrachtpalet en voer Azurite uit: Start Queue Service.

  3. Start Azure Storage Explorer als deze nog niet is gestart.

  4. Selecteer Bericht toevoegen in Azure Storage Explorer:

    Screenshot that shows the selection for adding a message on the queue.

  5. Voer in het dialoogvenster dat wordt weergegeven een bericht in en selecteer OK. U ziet nu de details van het bericht dat u hebt gemaakt.

    Screenshot that shows message details.

  6. In Visual Studio Code moet uw functie nu worden uitgevoerd. In de terminal ziet u nu het bericht dat als laatste rij wordt afgedrukt.

    Uw functie kon het wachtrijbericht gebruiken en de inhoud ervan wegschrijven.

Gefeliciteerd. U hebt een Azure-functie in Go gebouwd die kan worden geactiveerd voor een wachtrijbericht. U hebt dat bericht ook geparseerd.

Wat u met een binnenkomend bericht doet, is aan u. U kunt deze bijvoorbeeld opslaan in een database of deze verzenden als de nettolading in een webaanvraag.