Sorbaállítási kiváltó

Befejeződött

Az üzenetsorok olyan szoftverösszetevők, amelyek a folyamatok, szálak vagy alkalmazások közötti üzenetküldés kezelésére szolgálnak. Az üzenetsorok képesek tárolni az üzeneteket, a feldolgozók pedig lekérhetik az üzenetet, ha ez jó alkalom.

A felhőben az üzenetsorok adathordozóval hozhatnak létre eseményeket. Az Azure Functions-hez hasonló szolgáltatások meghallgathatják az ilyen üzeneteket, és futtathatják a kódját egy üzenet közzétételekor.

Üzenetsorokkal való munka

Ahhoz, hogy egy Azure-függvény képes legyen üzeneteket felhasználni egy üzenetsorból, eseményindítóra és esetleg kötésre van szüksége.

Az Azure-függvénynek figyelnie kell egy adott üzenetsort, hogy a kód aktiválódjon, amikor új üzenetet tesznek közzé az üzenetsoron. Az eseményindító beállításához meg kell adnia a megfelelő hitelesítő adatokat, hogy az eseményindító kód tudja, hogyan csatlakozhat az üzenetsorhoz. Egy bejegyzést hoz létre a function.json fájlban azon függvény részére, amely az üzenetsort figyeli. Az elemben bindings adja meg az alábbi tulajdonságokat egy bejegyzésben:

Tulajdonság Érték
name Kódban hivatkozható név
type queueTrigger
direction in
queueName Az üzenetsor neve
connection Konfigurációs változó a local.settings.json

Egy példabejegyzés a következőképpen definiálható:

{
    "name": "myQueueItem",
    "type": "queueTrigger",
    "direction": "in",
    "queueName": "messages-incoming",
    "connection": "AzureWebJobsStorage"
  }

Ha ez az üzenetsor egy tárfiókban található, az AzureWebJobsStorage érték a kapcsolati sztring értéke.

Az üzenetsorból érkező üzenetek felhasználásakor nincs szükség szigorúan kötésre. Ha azonban egy üzenetsorba szeretne írni, kimeneti kötésre van szüksége. Ilyen kötéssel a kívánt üzenetsorra mutató hivatkozást kap.

Feljegyzés

Jelenleg csak a kimeneti kötések támogatottak az üzenetsorokhoz.

Helyi fejlesztés

Fejlesztőként rövid visszajelzési ciklusokat szeretne. Azt is szeretné biztosítani, hogy a fejlesztés során szerzett tapasztalat a lehető legközelebb álljon az éles környezethez. Mindkét célkitűzés elérésének egyik módja egy üzenetsor-emulátor használata.

Az üzenetsor-emulátorsal valós üzenetsor-üzeneteket szimulálhat, amelyekre az Azure-függvény válaszolni fog. Az emulátor használata:

  1. Telepítse az emulátort. Keressen rá az Azurite-ra a Visual Studio Code-ban, vagy töltse le az Azurite bővítményt.

  2. Az emulátor funkcióinak használatához indítsa el a parancskatalógusban az Azure: Start Queue Service kiválasztásával.

    A parancs futtatása elindít egy Azure Storage Explorer nevű figyelőt, amelyet egy másik alkalmazás is felvehet. A Storage Explorer egy ügyfélalkalmazás, amellyel tallózhat a felhőbeli erőforrások között, és emulátorfunkciót használhat.

  3. Töltse le az Azure Storage Explorert. Ezután nyissa meg az alkalmazást, és az alábbi jelzés jelenik meg arról, hogy az emulátor működik:

    Képernyőkép az Emulátorról az Azure Storage Explorerben.

  4. Hozzon létre egy sort az emulátoron. Ezt a sort fogja használni a függvényvégpont konfigurálásának részeként. Ha a jobb gombbal az üzenetsorelemre kattint, létrehozhat egy új üzenetsort.

  5. Ahhoz, hogy a Functions-alkalmazás használja az emulátort, helyesen kell beállítani a kapcsolati láncot. Nyissa meg .

    Feljegyzés

    Ne felejtse el másképp beállítani ezt a tulajdonságot, amikor a felhőbe lép. Éles üzemmódban egy Azure-n található valós erőforrásra kell mutatnia.

A függvény létrehozása

Most már beállított egy helyi emulátort, amelyen sor van rajta. A projektet úgy is konfigurálta, hogy a helyi emulátorra mutasson. Most készítenie kell egy függvényt egy sor-alapú eseményindító kezeléséhez.

Függvényvégpont létrehozása

Készen áll egy olyan függvény létrehozására, amely képes kezelni a sorból érkező üzeneteket. Hozzon létre egy mappát a függvényhez, és nevezze el például queueTrigger. Ezután hozzon létre egy function.json fájlt, és adja meg a következő tartalmat:

{
  "bindings": [{
    "name" "queueItem",
    "type": "queueTrigger",
    "direction": "in",
    "queueName" : "items",
    "connection": "AzureWebJobsStorage"
  }]
}

A name elem értéke fontos, mert a kód későbbi részében hivatkozni fog rá, hogy feldolgozza a bejövő adatokat az üzenetsorból. Típusnak queueTrigger kell lennie, hogy az üzenetsor aktiválja azt egy új üzenet esetén.

Az queueName elem egyedileg azonosítja, hogy melyik üzenetsorral áll kapcsolatban. Az itt megadott adatoknak egyeznie kell azzal, amit az emulátorban az üzenetsornak hív, vagy amit később a tényleges üzenetsornak nevez az Azure-ban.

Az connection elem a local.settings.jsonAzureWebJobsStorageértékére mutat.

Üzenetsor kezelése

A bejövő üzenetsorok kezeléséhez olyan kódot kell írnia, amely elemezni tudja a szükséges üzenetet. Ezen a ponton eldöntheti, hogy mi a következő lépés. Elindíthat például egy webes kérést, elhelyezheti az üzenetet egy másik üzenetsoron, vagy elküldheti az üzenetet egy adatbázisba.

Útvonal beállítása

Szüksége van egy útvonalra a bejövő kérések kezeléséhez. Az Azure Functions a gyökérsorra irányuló kéréseket fogja kezelni. Ha az alábbiak szerint állítja be az útvonalat, a rendszer a következő módon http://localhost:<port>/queueTriggerhívja meg a kérést:

http.HandleFunc("/queueTrigger", handleQueueTrigger)

Kérés dekódolása

Amikor az üzenetsor-üzenet el lesz küldve Önnek, a következő alakzatot kapja:

{
  "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"
    }
  }
}

A bejövő kérés dekódolásának részeként olyan segédstruktúra szükséges, amely az előző üzenetet modellezi. Ennek így kell kinéznie:

type InvokeRequest {
   Data map[string]json.RawMessage
   Metadata map[string]interface{}
}

Kezdje el írni a kódot a bejövő kérés beírásához és dekódolásához:

func handleQueueTrigger(w http.ResponseWrite, r *http.Request) {
   var invokeRequest InvokeRequest
   d := json.NewDecoder(r.Body)
   d.Decode(&invokeRequest)
}

Most már egy olyan ponton van, ahol a kérést dekódolták, de magát az üzenetsor-üzenetet kell elemeznie.

Sorban álló üzenet feldolgozása

A kérés dekódolása után az üzenetsor üzenete lekérhető a tulajdonságon lévő Data kérésből. A function.json fájlban beállított name tulajdonságérték alapján az üzenetre is hivatkoznia kell. Az üzenet beolvasására szolgáló kód egy egysoros, mint a következő:

invokeRequest.Data["queueItem"]

Mivel ezt az üzenetet tiszta szövegben kell olvasnia, JSON-kódtárat kell használnia, és elemeznie kell azt. A JSON-kódtár egy olyan metódust Unmarshal() használ, amely két paramétert használ: az elemezni kívánt üzenetet és a változót az elemzési üzenet elhelyezéséhez. A kódnak így kell kinéznie:

var parsedMessage string
json.Unmarshal(invokeRequest.Data["queueItem"], &parsedMessage)

Ezen a ponton tartalmazza parsedMessage az üzenetet. Ha ki szeretné nyomtatni a konzolra, használja a következő kódot:

fmt.Println(parsedMessage) // your message

Feljegyzés

Ha az üzenet több, mint egy egyszerű szöveg, akkor a parsedMessage-nak olyan struktúrával kell rendelkeznie, amely megfelel annak, amire a queueMessage mutat.

Üzenet indítása

Az alkalmazás teszteléséhez használhatja az Azure Storage Explorert. Az eszköz jobb oldali ablaktábláján az Üzenet hozzáadása gombra kattintva hozzon létre üzenetet az üzenetsoron.

Képernyőkép az üzenetsorhoz való üzenet hozzáadására szolgáló gombról.

Ha rendelkezik a Functions-alkalmazással, és ezen a ponton fut, az aktiválja a kötést, és meghívja a kódot.