Øvelse – håndter en kømeddelelse
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.
VælgVis>kommandopalet .
Vælg Azure Functions: Opret nyt projekt.
Vælg en mappe, som normalt er den aktuelle mappe.
I Vælg et sprogskal du vælge Brugerdefineret handler.
I Vælg en skabelon til din første funktionskal du vælge HttpTrigger.
Giv appen et navn, f.eks. queueTrigger.
Vælg et godkendelsesniveau for anonyme. Du kan ændre det senere, hvis du vil.
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.goGå til function.json-filen i mappen
queueTrigger. Find den første bindingspost itype-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 tilqueueTrigger, hvilket gør det muligt at lytte til kømeddelelser.Værdien
queueNamepeger 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.
Å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.Find importafsnittet, og tilføj følgende strukturer under den:
type InvokeRequest struct { Data map[string]json.RawMessage Metadata map[string]interface{} }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.
Tilføj følgende kode:
fmt.Println(parsedMessage) // your messageDin kode er nu skrevet, men du skal konfigurere dit projekt, så du kan teste den.
Find elementet i filen
defaultExecutablePath, og giv det en værdi på./server.Seddel
Til Windows skal du bruge værdien
.\\server.exe.Opret filen server.go ved at køre
go buildi 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ø.
I den local.settings.json fil skal du finde et element i
ValueskaldetAzureWebJobsStorage(eller tilføje det, hvis det mangler). Giv den værdienUseDevelopmentStorage=true. Dit JSON-element skal se sådan ud:"AzureWebJobsStorage" : "UseDevelopmentStorage=true"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.
Åbn Azure Storage Explorer. I venstre side er indholdet af emulatoren synligt.
Højreklik på noden Køer, og vælg indstillingen for at oprette en ny kø. Giv den navnet elementer.
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.
Find function.json under mappen
queueTrigger. Kontrollér, at matrixenbindingshar følgende post:{ "name": "queueItem", "type": "queueTrigger", "direction": "in", "queueName" : "items", "connection": "AzureWebJobsStorage" }Egenskaben
queueNamehar samme navn som den kø, du oprettede i Azure Storage Explorer. Egenskabenconnectionpeger på den værdi, du konfigurerede i local.settings.json.Egenskaben
namehar værdienqueueItem. 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.
Kør kommandoen
func starti projektroden fra en terminal:func startÅbn kommandopaletten i Visual Studio Code, og kør Azurite: Start køtjeneste.
Start Azure Storage Explorer, hvis den ikke allerede er startet.
I Azure Storage Explorer skal du vælge Tilføj meddelelse:
I den viste dialogboks skal du angive meddelelse og vælge OK. Du kan nu se detaljerne for den meddelelse, du har oprettet.
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.