Øvelse – håndter en kømeddelelse

Fuldført

I denne øvelse skal du udvide dit program med en rute, der kan udløses på en meddelelse i en meddelelseskø.

Seddel

Før du starter denne øvelse, skal du sørge for, at du downloadet Azurite-udvidelsen, downloadet Azure Storage Explorerog downloadet Azure Functions Core Tools.

Stillads til appen

I denne øvelse starter vi på en ny Azure Functions-app. Opret en ny mappe, og placer dig selv i den.

  1. VælgVis>kommandopalet .

  2. Vælg Azure Functions: Opret nyt projekt.

  3. Vælg en mappe, som normalt er den aktuelle mappe.

  4. I Vælg et sprogskal du vælge Brugerdefineret handler.

  5. I Vælg en skabelon til din første funktionskal du vælge HttpTrigger.

  6. Giv appen et navn, f.eks. queueTrigger.

  7. Vælg et godkendelsesniveau for anonyme. Du kan ændre det senere, hvis du vil.

  8. Opret en fil med navnet server.goi roden. Projektet skal nu have følgende filer:

    queueTrigger/
      function.json
    .funcignore
    .gitignore
    host.json
    local.settings.json
    proxies.json
    server.go 
    
  9. Gå til function.json-filen i mappen queueTrigger. Find den første bindingspost i type-elementet:

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

    Ret denne bindingspost til denne konfiguration:

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

    I dette trin skal du angive egenskaben name. Du refererer til den senere i koden. Du har også ændret udløsertypen til queueTrigger, hvilket gør det muligt at lytte til kømeddelelser.

    Værdien queueName peger på en bestemt kø. Når du kører emulatoren senere, opretter du en kø med et sådant navn.

    Til sidst pegede du på en variabel i local.settings.json, der indeholder forbindelsesstrengen til køen.

Opret appen

På dette tidspunkt har du et app-skelet. Du er nu klar til at tilføje kode, der kan håndtere indgående kømeddelelser.

  1. Åbn filen server.go, og tilføj følgende kode:

    package main
    
    import (
      "encoding/json"
      "fmt"
      "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))
    }
    

    Du har nu konfigureret en rute på /queueTrigger.

  2. Find importafsnittet, og tilføj følgende strukturer under den:

    type InvokeRequest struct {
      Data     map[string]json.RawMessage
      Metadata map[string]interface{}
    }
    
  3. Find metoden queueHandler(), og tilføj opdater den på følgende måde:

    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)
    }
    

    Koden læser først brødteksten fra den indgående svarstrøm og afkoder den:

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

    Derefter graves selve meddelelsen ud med et kald til Unmarshal():

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

    Nu, hvor du har meddelelsen, kan vi udskrive den.

  4. Tilføj følgende kode:

    fmt.Println(parsedMessage) // your message
    

    Din kode er nu skrevet, men du skal konfigurere dit projekt, så du kan teste den.

  5. Find elementet i filen defaultExecutablePath, og giv det en værdi på ./server.

    Seddel

    Til Windows skal du bruge værdien .\\server.exe.

  6. Opret filen server.go ved at køre go build i projektroden:

    go build server.go
    

Konfigurer miljøet

Det næste trin er at konfigurere dit miljø. Da du udvikler lokalt, skal du konfigurere den, så du kan tale med en emuleret meddelelseskø.

  1. I den local.settings.json fil skal du finde et element i Values kaldet AzureWebJobsStorage (eller tilføje det, hvis det mangler). Giv den værdien UseDevelopmentStorage=true. Dit JSON-element skal se sådan ud:

    "AzureWebJobsStorage" : "UseDevelopmentStorage=true"
    
  2. Start azuriteudvidelsen ved at åbne kommandopaletten (Vis>kommandopalet), og vælg derefter Azurite: Start køtjeneste.

    Seddel

    Dette trin opretter nogle lokale filer i projektet.

  3. Åbn Azure Storage Explorer. I venstre side er indholdet af emulatoren synligt.

  4. Højreklik på noden Køer, og vælg indstillingen for at oprette en ny kø. Giv den navnet elementer.

    Skærmbillede, der viser emulatoren i Azure Storage Explorer med en ny kø oprettet.

    Seddel

    Du kan navngive køen, som du vil. Du er dog ved at konfigurere din function.json-fil. Uanset hvad du navngiver køen her, skal du gå til function.json.

  5. Find function.json under mappen queueTrigger. Kontrollér, at matrixen bindings har følgende post:

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

    Egenskaben queueName har samme navn som den kø, du oprettede i Azure Storage Explorer. Egenskaben connection peger på den værdi, du konfigurerede i local.settings.json.

    Egenskaben name har værdien queueItem. Din Go-kode bruger denne værdi til at fortolke kømeddelelsen.

Kør appen

På dette tidspunkt er alt konfigureret. Du skal bare køre appen, starte Azure Storage Explorer og oprette en kømeddelelse. Din kode skal kunne forbruge denne meddelelse.

  1. Kør kommandoen func start i projektroden fra en terminal:

    func start
    
  2. Åbn kommandopaletten i Visual Studio Code, og kør Azurite: Start køtjeneste.

  3. Start Azure Storage Explorer, hvis den ikke allerede er startet.

  4. I Azure Storage Explorer skal du vælge Tilføj meddelelse:

    Skærmbillede, der viser valget for at tilføje en meddelelse i køen.

  5. I den viste dialogboks skal du angive meddelelse og vælge OK. Du kan nu se detaljerne for den meddelelse, du har oprettet.

    Skærmbillede, der viser meddelelsesdetaljer.

  6. I Visual Studio Code bør din funktion nu køre. I terminalen kan du nu se, meddelelse udskrevet som den sidste række.

    Din funktion kunne forbruge kømeddelelsen og skrive dens indhold.

Tillykke! Du har bygget en Azure-funktion i Go, der kan udløses på en kømeddelelse. Du har også fortolket denne meddelelse.

Det, du gør med en indgående meddelelse, er op til dig. Du kan f.eks. gemme den i en database eller måske sende den som nyttedata i en webanmodning.