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ík služby Azure Storage a stáhli 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 paletu příkazů Zobrazit>.
Vyberte Azure Functions: Vytvořit nový projekt.
Vyberte složku, obvykle vaši aktuální složku.
V části Vybrat jazyk 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.go
Přejděte do souboru function.json v
queueTrigger
adresář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
name
vlastnost. 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
queueName
odkazuje na konkrétní frontu. Když emulátor spustíte později, vytvoříte frontu s takovým názvem.Nakonec jste v local.settings.json uvedli proměnnou, 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" "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)) }
Nyní máte nastavenou trasu na
/queueTrigger
adrese .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 message
Váš kód je teď napsaný, ale potřebujete nakonfigurovat projekt, abyste ho mohli otestovat.
V souboru host.json najděte
defaultExecutablePath
prvek a dejte mu hodnotu./server
.Poznámka:
Pro Windows byste použili hodnotu
.\server.exe
.Sestavte soubor server.go spuštěním
go build
v 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.
V souboru local.settings.json najděte volaný
AzureWebJobsStorage
prvekValues
(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 pro vytvoření nové fronty. Pojmenujte položky.
Poznámka:
Frontu můžete pojmenovat podle potřeby. Chystáte se ale nakonfigurovat function.json soubor. Ať už tady pojmenujete frontu, musíte přejít do function.json.
Vyhledejte function.json pod adresářem
queueTrigger
. Ujistěte se, že polebindings
obsahuje následující položku:{ "name": "queueItem", "type": "queueTrigger", "direction": "in", "queueName" : "items", "connection": "AzureWebJobsStorage" }
Vlastnost
queueName
má stejný název jako fronta, kterou jste vytvořili v Průzkumník služby Azure Storage. Vlastnostconnection
odkazuje na hodnotu, kterou jste nastavili v local.settings.json.Vlastnost
name
má 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 start
příkaz v kořenovém adresáři projektu:func start
V 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ík 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.