Spouštěč fronty

Dokončeno

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íci ji můžou načíst, až bude vhodná doba.

Fronty zpráv v cloudu mohou generovat události s užitečným zatížením. 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:

Nemovitost / Majetek / 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 se tato fronta nachází v účtu úložiště, hodnota AzureWebJobsStorage je hodnota připojovacího řetězce.

Když spotřebováváte zprávu z fronty, nepotřebujete nutně 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:

  1. Nainstalujte emulátor. Vyhledejte Azurite v editoru Visual Studio Code nebo si stáhněte rozšíření Azurite.

  2. Pokud chcete použít funkci emulátoru, spusťte ji tím, že na paletě příkazů vyberete Azure: Spustit frontu služeb.

    Spuštěním tohoto příkazu spustíte naslouchací proces nazvaný Azure Storage Explorer, který může použít 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.

  3. 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:

    Snímek obrazovky, který zobrazuje emulátor v Azure Storage Explorer.

  4. 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.

  5. 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

Nyní máte nastavený místní emulátor, který má na sobě frontu. Také jste nakonfigurovali projekt tak, aby odkazoval na místní emulátor. Teď potřebujete vytvořit funkci pro zpracování spouště fronty.

Vytvoření koncového bodu funkce

Jste připraveni vytvořit funkci, která umí zpracovat 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 mohli parsovat příchozí data 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, jak nazýváte frontu v emulátoru, nebo tomu, jak později nazvete svou skutečnou frontu v Azure.

Prvek connection odkazuje na hodnotu AzureWebJobsStorage prvku v local.settings.json.

Zpracovejte zprávu fronty

Pokud chcete zpracovat zprávu příchozí fronty, musíte napsat kód, který umí 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)
}

Nyní jste v bodě, kdy byl požadavek dekódován, ale potřebujete analyzovat samotnou zprávu fronty.

Zpracování zprávy fronty

Po dekódování požadavku lze zprávu fronty načíst z požadavku na vlastnost Data. Také musíte odkazovat na zprávu pomocí hodnoty vlastnosti name, 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ě.

Snímek obrazovky znázorňující tlačítko pro přidání zprávy do fronty

Pokud máte aplikaci Functions, která je v tuto chvíli spuštěná, aktivuje vazbu a vyvolá se váš kód.