Sorbaállítási kiváltó
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:
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.
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.
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:
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.
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.
Ha rendelkezik a Functions-alkalmazással, és ezen a ponton fut, az aktiválja a kötést, és meghívja a kódot.