Oefening: een wachtrijbericht verwerken
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.
Selecteer Opdrachtpalet weergeven>.
Selecteer Azure Functions: Nieuw project maken.
Selecteer een map, meestal uw huidige map.
Selecteer aangepaste handler in Een taal selecteren.
Selecteer HttpTrigger in Selecteer een sjabloon voor uw eerste functie.
Geef de app een naam, zoals queueTrigger.
Selecteer een autorisatieniveau van anoniem. U kunt dit later desgewenst wijzigen.
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
Ga naar het bestand function.json in de
queueTrigger
map. Zoek de eerste bindingsvermelding in hettype
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 inqueueTrigger
, 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.
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
.Zoek de importsectie en voeg de volgende structs toe:
type InvokeRequest struct { Data map[string]json.RawMessage Metadata map[string]interface{} }
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.
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.
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
.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.
Zoek in het bestand local.settings.json een element in
Values
de aangeroepen naamAzureWebJobsStorage
(of voeg het toe als het ontbreekt). Geef deze de waardeUseDevelopmentStorage=true
. Uw JSON-vermelding moet er als volgt uitzien:"AzureWebJobsStorage" : "UseDevelopmentStorage=true"
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.
Open Azure Storage Explorer. Aan de linkerkant is de inhoud van de emulator zichtbaar.
Klik met de rechtermuisknop op het knooppunt Wachtrijen en selecteer de optie om een nieuwe wachtrij te maken. Geef deze de naamitems.
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.
Zoek function.json onder de
queueTrigger
map. Zorg ervoor dat debindings
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. Deconnection
eigenschap verwijst naar de waarde die u hebt ingesteld in local.settings.json.De
name
eigenschap heeft de waardequeueItem
. 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.
Voer vanuit een terminal de
func start
opdracht uit in de hoofdmap van het project:func start
Open in Visual Studio Code het opdrachtpalet en voer Azurite uit: Start Queue Service.
Start Azure Storage Explorer als deze nog niet is gestart.
Selecteer Bericht toevoegen in Azure Storage Explorer:
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.
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.