Aktivační událost fronty
Fronta zpráv je softwarová komponenta, která se používá ke zpracování zpráv mezi procesy, vlákny nebo aplikacemi. Fronta může uložit zprávu a pracovní procesy ji můžou načíst, až bude vhodná doba.
Fronty zpráv v cloudu můžou generovat události s datovou částí. Služba, jako je Azure Functions, může naslouchat takové zprávě a spustit její kód při publikování zprávy.
Práce s frontami zpráv
Aby funkce Azure mohla využívat zprávu z fronty zpráv, potřebuje trigger a případně vazbu.
Funkce Azure musí naslouchat určité frontě, aby se její kód aktivoval při publikování nové zprávy v této frontě. Pokud chcete nastavit trigger, musíte zadat správné přihlašovací údaje, aby kód triggeru věděl, jak se připojit k frontě zpráv. V souboru function.json vytvoříte položku pro funkci, která naslouchá frontě. V elementu bindings
zadejte tyto vlastnosti položky:
Vlastnost | Hodnota |
---|---|
name |
Název, na který můžete odkazovat v kódu |
type |
queueTrigger |
direction |
in |
queueName |
Čemu se fronta říká |
connection |
Konfigurační proměnná v local.settings.json |
Ukázkovou položku lze definovat takto:
{
"name": "myQueueItem",
"type": "queueTrigger",
"direction": "in",
"queueName": "messages-incoming",
"connection": "AzureWebJobsStorage"
}
Pokud tato fronta žije v účtu úložiště, AzureWebJobsStorage
hodnota je hodnota připojovací řetězec.
Při používání zprávy z fronty nepotřebujete výhradně vazbu. Pokud ale chcete zapisovat do fronty, potřebujete výstupní vazbu. S takovou vazbou získáte odkaz na zamýšlenou frontu.
Poznámka:
V současné době jsou pro fronty podporovány pouze výstupní vazby.
Vývoj v místním prostředí
Jako vývojář chcete krátké cykly zpětné vazby. Také chcete zajistit, aby prostředí pro vývojáře bylo co nejblíže produkčnímu prostředí. K dosažení obou těchto cílů slouží emulátor fronty.
Emulátor fronty umožňuje simulovat skutečné zprávy fronty, na které bude funkce Azure reagovat. Použití emulátoru:
Nainstalujte emulátor. Vyhledejte Azurite v editoru Visual Studio Code nebo si stáhněte rozšíření Azurite.
Pokud chcete použít funkci emulátoru, spusťte ji tak , že na paletě příkazů vyberete Azure: Spustit službu fronty.
Spuštěním tohoto příkazu spustíte naslouchací proces s názvem Průzkumník služby Azure Storage, kterou může vyzvednout jiná aplikace. Průzkumník služby Storage je klientská aplikace, která umožňuje procházet cloudové prostředky a používat funkce emulátoru.
Stáhněte si Průzkumník služby Azure Storage. Pak otevřete aplikaci a zobrazí se následující indikace, že emulátor funguje:
Vytvořte frontu v emulátoru. Tuto frontu použijete jako součást konfigurace koncového bodu funkce. Kliknutím pravým tlačítkem myši na prvek fronty můžete vytvořit novou frontu.
Aby aplikace Functions používala emulátor, musíte správně nastavit připojovací řetězec. Otevřete local.settings.json, vyhledejte
AzureWebJobsStorage
prvek a dejte mu hodnotu"UseDevelopmentStorage=true"
.Poznámka:
Při přechodu do cloudu nezapomeňte tuto vlastnost nastavit jinak. V produkčním prostředí by měl odkazovat na skutečný prostředek v Azure.
Sestavení funkce
Teď máte nastavený místní emulátor a má na něm frontu. Také jste nakonfigurovali projekt tak, aby odkazoval na místní emulátor. Teď potřebujete vytvořit funkci pro zpracování triggeru fronty.
Vytvoření koncového bodu funkce
Jste připraveni vytvořit funkci, která dokáže zpracovávat příchozí zprávy fronty. Vytvořte složku pro funkci a pojmenujte ji například queueTrigger
. Pak vytvořte soubor function.json a dejte mu následující obsah:
{
"bindings": [{
"name" "queueItem",
"type": "queueTrigger",
"direction": "in",
"queueName" : "items",
"connection": "AzureWebJobsStorage"
}]
}
Hodnota name
prvku je důležitá, protože na ni později v kódu odkazujete, abyste parsování příchozích dat z fronty. Musí být typu queueTrigger
, aby ji fronta aktivovala, když se zobrazí nová zpráva.
Prvek queueName
jednoznačně identifikuje, se kterou frontou pracujete. Cokoli zde zadáte, musí odpovídat tomu, co voláte frontu v emulátoru nebo co později zavoláte vlastní frontu v Azure.
Prvek connection
odkazuje na hodnotu AzureWebJobsStorage
prvku v local.settings.json.
Zpracování zprávy fronty
Pokud chcete zpracovat zprávu příchozí fronty, musíte napsat kód, který dokáže analyzovat zprávu, kterou potřebujete. V tomto okamžiku se můžete rozhodnout, co dělat dál. Můžete například spustit webový požadavek, vložit tuto zprávu do jiné fronty nebo zprávu odeslat do databáze.
Nastavení trasy
Potřebujete trasu pro zpracování příchozích požadavků. Azure Functions bude zpracovávat požadavky na frontu v kořenovém adresáři. Když nastavíte trasu následujícím způsobem, vaše žádost se vyvolá takto http://localhost:<port>/queueTrigger
:
http.HandleFunc("/queueTrigger", handleQueueTrigger)
Dekódování požadavku
Když se vám zpráva fronty odešle, má tento tvar:
{
"Data": {
"queueItem": "your message"
},
"Metadata": {
"DequeueCount": 1,
"ExpirationTime": "2019-10-16T17:58:31+00:00",
"Id": "800ae4b3-bdd2-4c08-badd-f08e5a34b865",
"InsertionTime": "2019-10-09T17:58:31+00:00",
"NextVisibleTime": "2019-10-09T18:08:32+00:00",
"PopReceipt": "AgAAAAMAAAAAAAAAAgtnj8x+1QE=",
"sys": {
"MethodName": "QueueTrigger",
"UtcNow": "2019-10-09T17:58:32.2205399Z",
"RandGuid": "24ad4c06-24ad-4e5b-8294-3da9714877e9"
}
}
}
V rámci dekódování příchozího požadavku potřebujete pomocnou strukturu, která modeluje předchozí zprávu. Měl by vypadat takto:
type InvokeRequest {
Data map[string]json.RawMessage
Metadata map[string]interface{}
}
Začněte psát kód, který převezme příchozí požadavek a dekóduje ho:
func handleQueueTrigger(w http.ResponseWrite, r *http.Request) {
var invokeRequest InvokeRequest
d := json.NewDecoder(r.Body)
d.Decode(&invokeRequest)
}
Teď jste v okamžiku, kdy byl požadavek dekódován, ale potřebujete analyzovat samotnou zprávu fronty.
Analýza zprávy fronty
Po dekódování požadavku lze zprávu fronty načíst z požadavku na Data
vlastnost. Musíte také odkazovat na zprávu hodnotou name
vlastnosti, kterou jste nastavili v souboru function.json . Kód pro načtení zprávy je jeden řádek podobný tomuto:
invokeRequest.Data["queueItem"]
Protože potřebujete mít možnost číst tuto zprávu ve formátu prostého textu, použijete knihovnu JSON a parsujete ji. Knihovna JSON použije metodu Unmarshal()
, která má dva parametry: zprávu, která se má analyzovat, a proměnná k umístění analyzované zprávy. Váš kód proto musí vypadat takto:
var parsedMessage string
json.Unmarshal(invokeRequest.Data["queueItem"], &parsedMessage)
V tomto okamžiku parsedMessage
obsahuje vaši zprávu. Pokud ho chcete vytisknout do konzoly, použijte následující kód:
fmt.Println(parsedMessage) // your message
Poznámka:
Pokud je zpráva něco pokročilejšího než řetězec, musí mít strukturu, která odpovídá tvaru toho, parsedMessage
na co queueMessage
ukazuje.
Aktivace zprávy
K otestování aplikace můžete použít Průzkumník služby Azure Storage. V pravém podokně nástroje vyberte tlačítko Přidat zprávu a vytvořte zprávu ve frontě.
Pokud máte aplikaci Functions, která je v tuto chvíli spuštěná, aktivuje vazbu a vyvolá se váš kód.