Cvičení – zpracování zprávy fronty
V tomto cvičení rozšíříte aplikaci o trasu, která se může aktivovat ve zprávě ve frontě zpráv.
Poznámka:
Než začnete s tímto cvičením, ujistěte se, že jste stáhli rozšíření Azurite, stáhli průzkumníka služby Azure Storage a stáhli si nástroje Azure Functions Core Tools.
Generování uživatelského rozhraní aplikace
V tomto cvičení začneme s novou aplikací Azure Functions. Vytvořte nový adresář a umístěte ho do něj.
Vyberte Zobrazit>Paletu příkazů.
Vyberte Azure Functions: Vytvořit nový projekt.
Vyberte složku, obvykle vaši aktuální složku.
V položce Výběr jazyka vyberte Vlastní obslužnou rutinu.
V části Vybrat šablonu pro první funkci vyberte HttpTrigger.
Pojmenujte aplikaci, například queueTrigger.
Vyberte úroveň autorizace anonymního uživatele. Pokud chcete, můžete to později změnit.
V kořenovém adresáři vytvořte soubor s názvem server.go. Projekt by teď měl mít následující soubory:
queueTrigger/ function.json .funcignore .gitignore host.json local.settings.json proxies.json server.goPřejděte do souborufunction.json v
queueTriggeradresáři. Najděte první položku vazby v elementutype:{ "authLevel": "anonymous", "type": "httpTrigger", "direction": "in", "name": "req", "methods": [ "get", "post" ] }Změňte tuto položku vazby na tuto konfiguraci:
{ "name": "queueItem", "type": "queueTrigger", "direction": "in", "queueName" : "items", "connection": "AzureWebJobsStorage" }V tomto kroku nastavíte
namevlastnost. Později na něj budete odkazovat v kódu. Změnili jste také typ triggeru naqueueTrigger, který umožňuje naslouchat zprávům ve frontě.Hodnota
queueNameodkazuje na konkrétní frontu. Když emulátor spustíte později, vytvoříte frontu s takovým názvem.Nakonec jste uvedli proměnnou v local.settings.json , která bude obsahovat připojovací řetězec do fronty.
Vytvoření aplikace
V tuto chvíli máte kostru aplikace. Teď jste připraveni přidat kód, který dokáže zpracovávat příchozí zprávy fronty.
Otevřete soubor server.go a přidejte následující kód:
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)) }Nyní máte nastavenou trasu na
/queueTriggeradrese .Najděte oddíl importu a přidejte do něj následující struktury:
type InvokeRequest struct { Data map[string]json.RawMessage Metadata map[string]interface{} }Vyhledejte metodu
queueHandler()a přidejte ji následujícím způsobem: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) }Kód nejprve přečte tělo z příchozího streamu odpovědi a dekóduje ho:
var invokeRequest InvokeRequest d := json.NewDecoder(r.Body) d.Decode(&invokeRequest)Pak je zpráva sama vykopaná voláním
Unmarshal():var parsedMessage string json.Unmarshal(invokeRequest.Data["queueItem"], &parsedMessage)Teď, když máte zprávu, ji vytiskneme.
Přidejte následující kód:
fmt.Println(parsedMessage) // your messageVáš kód je teď napsaný, ale potřebujete nakonfigurovat projekt, abyste ho mohli otestovat.
V souboruhost.json najděte
defaultExecutablePathprvek a dejte mu hodnotu./server.Poznámka:
Pro Windows byste použili hodnotu
.\\server.exe.Sestavte soubor server.go spuštěním
go buildv kořenovém adresáři projektu:go build server.go
Konfigurace prostředí
Dalším krokem je konfigurace prostředí. Vzhledem k tomu, že vyvíjíte místně, musíte ho nastavit tak, abyste mohli mluvit s emulovanou frontou zpráv.
Ve souborulocal.settings.json najděte prvek s názvem
ValuesvAzureWebJobsStorage(nebo ho přidejte, pokud chybí). Dejte jí hodnotuUseDevelopmentStorage=true. Položka JSON by měla vypadat takto:"AzureWebJobsStorage" : "UseDevelopmentStorage=true"Spusťte rozšíření Azurite tak, že otevřete paletu příkazů (Zobrazit>paletu příkazů) a pak vyberete Azurite: Spustit službu fronty.
Poznámka:
Tento krok vytvoří v projektu nějaké místní soubory.
Otevřete Průzkumník služby Azure Storage. Na levé straně se zobrazí obsah emulátoru.
Klikněte pravým tlačítkem myši na uzel Fronty a vyberte možnost vytvořit novou frontu. Pojmenujte položky.
Poznámka:
Frontu můžete pojmenovat podle potřeby. Chystáte se ale nakonfigurovat function.json soubor. Bez ohledu na to, co tady pojmenujete frontu, musí přejít do function.json.
Vyhledejte function.json pod adresářem
queueTrigger. Ujistěte se, že polebindingsobsahuje následující položku:{ "name": "queueItem", "type": "queueTrigger", "direction": "in", "queueName" : "items", "connection": "AzureWebJobsStorage" }Vlastnost
queueNamemá stejný název jako fronta, kterou jste vytvořili v Průzkumník služby Azure Storage. Vlastnostconnectionodkazuje na hodnotu, kterou jste nastavili v local.settings.json.Vlastnost
namemá hodnotuqueueItem. Kód Go používá tuto hodnotu k parsování zprávy fronty.
Spustit aplikaci
V tuto chvíli je všechno nastavené. Stačí spustit aplikaci, spustit Průzkumník služby Azure Storage a vytvořit zprávu fronty. Váš kód by měl tuto zprávu využívat.
V terminálu spusťte
func startpříkaz v kořenovém adresáři projektu:func startV editoru Visual Studio Code otevřete paletu příkazů a spusťte Azurite: Start Queue Service.
Spusťte Průzkumník služby Azure Storage, pokud ještě není spuštěný.
V Průzkumníku služby Azure Storage vyberte Přidat zprávu:
V zobrazeném dialogovém okně zadejte zprávu a vyberte OK. Teď uvidíte podrobnosti o vytvořené zprávě.
V editoru Visual Studio Code by teď měla být vaše funkce spuštěná. V terminálu by se teď měla zobrazit zpráva vytištěná jako poslední řádek.
Vaše funkce mohla využívat zprávu fronty a zapisovat její obsah.
Gratulujeme! Vytvořili jste funkci Azure v Go, která se může aktivovat ve zprávě fronty. Tuto zprávu jste také parsovali.
Co děláte s příchozí zprávou, je na vás. Můžete ho například uložit do databáze nebo ji můžete odeslat jako datovou část ve webové žádosti.