Øvelse – Behandle en kømelding
I denne øvelsen utvider du programmet med en rute som kan utløse en melding i en meldingskø.
Notat
Før du starter denne øvelsen, må du kontrollere at du har lastet ned Azurite-utvidelsen, lastet ned Azure Storage Explorerog nedlastede Azure Functions Core Tools.
Stillas i appen
For denne øvelsen starter vi på en ny Azure Functions-app. Opprett en ny katalog, og plasser deg selv i den.
Velg Vis>kommandopalett.
Velg Azure-funksjoner: Opprett nytt prosjekt.
Velg en mappe, vanligvis gjeldende mappe.
Velg Egendefinert behandlingi Velg et språk.
Velg HttpTriggeri Velg en mal for den første funksjonen.
Gi appen et navn, for eksempel queueTrigger.
Velg et godkjenningsnivå for anonym. Du kan endre det senere hvis du vil.
Opprett en fil med navnet server.goved roten. Prosjektet skal nå ha følgende filer:
queueTrigger/ function.json .funcignore .gitignore host.json local.settings.json proxies.json server.goGå til function.json-filen i katalogen
queueTrigger. Finn den første bindingsoppføringen itypeelementet:{ "authLevel": "anonymous", "type": "httpTrigger", "direction": "in", "name": "req", "methods": [ "get", "post" ] }Endre bindingsoppføringen til denne konfigurasjonen:
{ "name": "queueItem", "type": "queueTrigger", "direction": "in", "queueName" : "items", "connection": "AzureWebJobsStorage" }I dette trinnet angir du egenskapen
name. Du vil se det senere i kode. Du har også endret utløsertypen tilqueueTrigger, noe som gjør det mulig å lytte til kømeldinger.Den
queueNameverdien peker ut en bestemt kø. Når du kjører emulatoren senere, oppretter du en kø med et slikt navn.Til slutt pekte du på en variabel i local.settings.json som vil inneholde tilkoblingsstrengen til køen.
Opprett appen
På dette tidspunktet har du et appskjelett. Nå er du klar til å legge til kode som kan håndtere innkommende kømeldinger.
Åpne filen server.go, og legg til 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 nå konfigurert en rute på
/queueTrigger.Finn importdelen, og legg til følgende strukturer under den:
type InvokeRequest struct { Data map[string]json.RawMessage Metadata map[string]interface{} }Finn
queueHandler()-metoden, og legg den til på følgende måte: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 leser først brødteksten fra innkommende svarstrøm og dekoder den:
var invokeRequest InvokeRequest d := json.NewDecoder(r.Body) d.Decode(&invokeRequest)Deretter blir selve meldingen gravd ut med et kall til
Unmarshal():var parsedMessage string json.Unmarshal(invokeRequest.Data["queueItem"], &parsedMessage)Nå som du har meldingen, kan du skrive den ut.
Legg til følgende kode:
fmt.Println(parsedMessage) // your messageKoden er nå skrevet, men du må konfigurere prosjektet slik at du kan teste det.
Finn -elementet i
defaultExecutablePath-filen, og gi den en verdi på./server.Notat
For Windows bruker du verdien
.\\server.exe.Bygg filen server.go ved å kjøre
go buildpå prosjektroten:go build server.go
Konfigurer miljøet
Det neste trinnet er å konfigurere miljøet. Fordi du utvikler lokalt, må du konfigurere det slik at du kan snakke med en emulert meldingskø.
Finn et element i kalt
Values(eller legg det til hvis det mangler) iAzureWebJobsStorage-filen. Gi den verdienUseDevelopmentStorage=true. JSON-oppføringen skal se slik ut:"AzureWebJobsStorage" : "UseDevelopmentStorage=true"Start Azurite-utvidelsen ved å åpne kommandopaletten (Vise>kommandopalett) og deretter velge Azurite: Start Køtjeneste.
Notat
Dette trinnet oppretter noen lokale filer i prosjektet.
Åpne Azure Storage Explorer. Innholdet i emulatoren er synlig på venstre side.
Høyreklikk på køer node, og velg alternativet for å opprette en ny kø. Gi den navnet elementer.
Notat
Du kan gi køen navnet du vil ha. Du er imidlertid i ferd med å konfigurere function.json filen. Uansett hva du navngir køen her, må du gå til function.json.
Finn function.json under
queueTriggerkatalogen. Kontroller atbindingsmatrisen har følgende oppføring:{ "name": "queueItem", "type": "queueTrigger", "direction": "in", "queueName" : "items", "connection": "AzureWebJobsStorage" }Egenskapen
queueNamehar samme navn som køen du opprettet i Azure Storage Explorer. Egenskapenconnectionpeker til verdien du satte opp i local.settings.json.Egenskapen
namehar verdienqueueItem. Go-koden bruker denne verdien til å analysere kømeldingen.
Kjør appen
Nå er alt konfigurert. Alt du trenger å gjøre er å kjøre appen, starte Azure Storage Explorer og opprette en kømelding. Koden skal kunne bruke denne meldingen.
Kjør kommandoen
func starti prosjektroten fra en terminal:func startÅpne kommandopaletten i Visual Studio Code, og kjør Azurite: Start Queue Service.
Start Azure Storage Explorer hvis den ikke allerede er startet.
Velg Legg til meldingi Azure Storage Explorer:
Skriv inn melding i dialogboksen som vises, og velg OK. Nå ser du detaljene for meldingen du opprettet.
I Visual Studio Code skal funksjonen nå kjøre. I terminalen skal du nå se melding skrevet ut som siste rad.
Funksjonen var i stand til å bruke kømeldingen og skrive ut innholdet.
Gratulerer! Du bygget en Azure-funksjon i Go som kan utløse på en kømelding. Du analyserte også meldingen.
Det du gjør med en innkommende melding, er opp til deg. Du kan for eksempel lagre den i en database eller kanskje sende den som nyttelast i en nettforespørsel.