Odesílání souvisejících zpráv v pořadí pomocí sekvenční konvoje v Azure Logic Apps s Azure Service Bus
Platí pro: Azure Logic Apps (Consumption)
Pokud potřebujete posílat korelované zprávy v určitém pořadí, můžete při použití Azure Logic Apps postupovat podle sekvenčního vzoru konvoje pomocí konektoru Azure Service Bus. Korelované zprávy mají vlastnost, která definuje vztah mezi těmito zprávami, například ID relace ve službě Service Bus.
Předpokládejme například, že máte 10 zpráv pro relaci s názvem Relace 1 a 5 zpráv pro relaci s názvem Relace 2, které se všechny odesílají do stejné fronty Služby Service Bus. Můžete vytvořit aplikaci logiky, která zpracovává zprávy z fronty tak, aby všechny zprávy z relace 1 byly zpracovány jedním spuštěním triggeru a všechny zprávy z relace 2 byly zpracovány dalším spuštěním triggeru.
Tento článek ukazuje, jak vytvořit aplikaci logiky, která implementuje tento vzor pomocí šablony Korelované doručování v pořadí pomocí relací služby Service Bus . Tato šablona definuje pracovní postup aplikace logiky, který se spouští triggerem Při přijetí zprávy ve frontě (peek-lock), který přijímá zprávy z fronty Service Bus. Tady jsou základní kroky, které tato aplikace logiky provádí:
Inicializujte relaci na základě zprávy, kterou aktivační událost přečte z fronty služby Service Bus.
Číst a zpracovávat všechny zprávy ze stejné relace ve frontě během aktuálního spuštění pracovního postupu.
Pokud chcete zkontrolovat soubor JSON této šablony, podívejte se na GitHub: service-bus-sessions.json.
Další informace najdete v tématu Sekvenční vzor konvoje – Vzory návrhu cloudu architektury Azure.
Požadavky
Předplatné Azure. Pokud předplatné nemáte, zaregistrujte si bezplatný účet Azure.
Obor názvů služby Service Bus a fronta služby Service Bus, což je entita zasílání zpráv, kterou budete používat ve své aplikaci logiky. Tyto položky a vaše aplikace logiky musí používat stejné předplatné Azure. Ujistěte se, že jste při vytváření fronty vybrali Povolit relace . Pokud tyto položky nemáte, přečtěte si, jak vytvořit obor názvů služby Service Bus a frontu.
Důležité
Při výběru triggeru i akce se stejným typem konektoru a jejich použití pro práci se stejnou entitou, jako je fronta zpráv nebo odběr tématu, postupujte opatrně. Tato kombinace může vytvořit nekonečnou smyčku, což má za následek aplikaci logiky, která nikdy nekončí.
Základní znalosti o vytváření aplikací logiky Pokud s Azure Logic Apps začínáte, vyzkoušejte rychlý start, který vytvoří ukázkový pracovní postup aplikace logiky Consumption v Azure Logic Apps s více tenanty.
Kontrola přístupu k oboru názvů služby Service Bus
Pokud si nejste jistí, jestli má vaše aplikace logiky oprávnění pro přístup k vašemu oboru názvů služby Service Bus, ověřte tato oprávnění.
Přihlaste se k webu Azure Portal. Vyhledejte a vyberte obor názvů služby Service Bus.
V nabídce oboru názvů v části Nastavení vyberte Zásady sdíleného přístupu. V části Deklarace identity zkontrolujte, že pro tento obor názvů máte oprávnění Ke správě .
Teď získejte připojovací řetězec pro váš obor názvů služby Service Bus. Tento řetězec můžete použít později při vytváření připojení k oboru názvů z aplikace logiky.
V podokně Zásady sdíleného přístupu v části Zásady vyberte RootManageSharedAccessKey.
Vedle primárního připojovacího řetězce vyberte tlačítko Kopírovat. Uložte si připojovací řetězec pro pozdější použití.
Tip
Pokud chcete ověřit, jestli je váš připojovací řetězec přidružený k vašemu oboru názvů služby Service Bus nebo k entitě zasílání zpráv, například k frontě, vyhledejte v připojovacím řetězci
EntityPath
parametr . Pokud najdete tento parametr, připojovací řetězec je určený pro konkrétní entitu a nejedná se o správný řetězec, který byste mohli použít v aplikaci logiky.
Vytvoření aplikace logiky
V této části vytvoříte aplikaci logiky pomocí šablony Korelované doručování v pořadí pomocí relací služby Service Bus , která obsahuje trigger a akce pro implementaci tohoto vzoru pracovního postupu. Vytvoříte také připojení k oboru názvů služby Service Bus a zadáte název fronty služby Service Bus, kterou chcete použít.
V Azure Portal vytvořte prázdnou aplikaci logiky. Na domovské stránce Azure vyberte Vytvořitaplikaci logikyintegrace>prostředku>.
Jakmile se zobrazí galerie šablon, přejděte za oddíly s videem a běžnými aktivačními událostmi. V části Šablony vyberte šablonu Korelované doručování v pořadí pomocí relací služby Service Bus.
Jakmile se zobrazí potvrzovací okno, vyberte Použít tuto šablonu.
V Návrháři aplikace logiky v obrazci Service Bus vyberte Pokračovat a pak vyberte znaménko plus (+), které se zobrazí v obrazci.
Teď vytvořte připojení service bus zvolením některé z možností:
Pokud chcete použít připojovací řetězec, který jste zkopírovali dříve z oboru názvů služby Service Bus, postupujte takto:
Vyberte Ručně zadat informace o připojení.
Do pole Název připojení zadejte název připojení. Do pole Připojovací řetězec vložte připojovací řetězec oboru názvů a vyberte Vytvořit, například:
Tip
Pokud tento připojovací řetězec nemáte, přečtěte si, jak najít a zkopírovat připojovací řetězec oboru názvů služby Service Bus.
Pokud chcete vybrat obor názvů služby Service Bus z aktuálního předplatného Azure, postupujte takto:
Do pole Název připojení zadejte název připojení. V části Obor názvů služby Service Bus vyberte obor názvů služby Service Bus, například:
Když se zobrazí další podokno, vyberte zásadu služby Service Bus a vyberte Vytvořit.
Až budete hotovi, vyberte Pokračovat.
Návrhář aplikace logiky teď zobrazuje šablonu Korelované doručování v pořadí pomocí relací služby Service Bus , která obsahuje předem vyplněný pracovní postup s triggerem a akcemi, včetně dvou oborů, které implementují zpracování chyb podle tohoto
Try-Catch
vzoru.
Teď můžete buď získat další informace o triggeru a akcích v šabloně, nebo přejít k zadání hodnot pro šablonu aplikace logiky.
Souhrn šablon
Tady je pracovní postup nejvyšší úrovně v šabloně Korelované doručování v pořadí pomocí relací služby Service Bus , když jsou podrobnosti sbalené:
Název | Description |
---|---|
When a message is received in a queue (peek-lock) |
Na základě zadaného opakování tento trigger služby Service Bus zkontroluje v zadané frontě služby Service Bus všechny zprávy. Pokud ve frontě existuje zpráva, aktivuje se trigger, který vytvoří a spustí instanci pracovního postupu. Termín peek-lock znamená, že trigger odešle požadavek na načtení zprávy z fronty. Pokud zpráva existuje, aktivační událost ji načte a uzamkne, aby se v této zprávě neprodá žádné další zpracování, dokud nevyprší období uzamčení. Podrobnosti získáte inicializací relace. |
Init isDone |
Tato akce inicializovat proměnnou vytvoří logickou proměnnou, která je nastavená na false hodnotu a označuje, kdy jsou splněny následující podmínky:– Žádné další zprávy v relaci nejsou k dispozici ke čtení. Podrobnosti najdete v tématu Inicializace relace. |
Try |
Tato akce Obor obsahuje akce, které se spustí ke zpracování zprávy. Pokud dojde k problému v Try oboru, následující Catch akce Obor tento problém vyřeší. Další informace najdete v tématu "Vyzkoušet" obor. |
Catch |
Tato akce Obor obsahuje akce, které se spustí, pokud dojde k problému v předchozím Try oboru. Další informace najdete v tématu Rozsah catch. |
Obor Vyzkoušet
Tady je tok nejvyšší úrovně v Try
akci oboru , když jsou podrobnosti sbalené:
Název | Description |
---|---|
Send initial message to topic |
Tuto akci můžete nahradit jakoukoli akcí, která má zpracovat první zprávu z relace ve frontě. ID relace určuje relaci. U této šablony akce Služby Service Bus odešle první zprávu do tématu služby Service Bus. Podrobnosti najdete v tématu Zpracování počáteční zprávy. |
(paralelní větev) | Tato akce paralelní větve vytvoří dvě cesty: – Větev č. 1: Pokračujte ve zpracování zprávy. Další informace najdete v tématu Větev č. 1: Dokončení počáteční zprávy ve frontě. – Větev č. 2: Pokud se něco pokazí, zprávu opusťte, a uvolněte ji pro vyzvednutí jiným spuštěním triggeru. Další informace najdete v tématu Větev 2: Opuštění počáteční zprávy z fronty. Obě cesty se později spojí v akci Zavřít relaci ve frontě a proběhne úspěšně , jak je popsáno v dalším řádku. |
Close a session in a queue and succeed |
Tato akce Služby Service Bus se připojí k výše popsaným větvím a ukončí relaci ve frontě po některé z následujících událostí: – Pracovní postup dokončí zpracování dostupných zpráv ve frontě. Podrobnosti najdete v tématu Ukončení relace ve frontě a úspěšné dokončení. |
Větev č. 1: Dokončení počáteční zprávy ve frontě
Název | Description |
---|---|
Complete initial message in queue |
Tato akce Služby Service Bus označí úspěšně načtenou zprávu jako dokončenou a odebere ji z fronty, aby se zabránilo opětovnému zpracování. Podrobnosti najdete v tématu Zpracování počáteční zprávy. |
While there are more messages for the session in the queue |
Tato smyčka Dokud bude dál dostávat zprávy, dokud zprávy existují nebo dokud ne uplyne jedna hodina. Další informace o akcích v této smyčce najdete v tématu I když je ve frontě pro relaci více zpráv. |
Set isDone = true |
Pokud žádné další zprávy neexistují, tato možnost Nastavit proměnné sady isDone akcí na true hodnotu . |
Renew session lock until cancelled |
Tato smyčka Until zajišťuje, že tato aplikace logiky drží zámek relace během existence zpráv nebo do uplynutí jedné hodiny. Další informace o akcích v této smyčce najdete v tématu Obnovení zámku relace do zrušení. |
Větev č. 2: Opuštění počáteční zprávy z fronty
Pokud akce, která zpracovává první zprávu, selže, akce Služby Service Bus , Opustit počáteční zprávu z fronty, uvolní zprávu pro spuštění jiné instance pracovního postupu, která provede vyzvednutí a zpracování. Podrobnosti najdete v tématu Zpracování počáteční zprávy.
Rozsah catch
Pokud akce v oboru selžou Try
, aplikace logiky musí relaci přesto zavřít. Akce oboru se Catch
spustí, když Try
má za následek akci oboru stav Failed
, Skipped
nebo TimedOut
. Obor vrátí chybovou zprávu, která obsahuje ID relace, ve které k problému došlo, a ukončí aplikaci logiky.
Tady je tok nejvyšší úrovně v Catch
akci oboru, když jsou podrobnosti sbalené:
Název | Description |
---|---|
Close a session in a queue and fail |
Tato akce Service Bus zavře relaci ve frontě, aby zámek relace nezůstál otevřený. Podrobnosti najdete v tématu Ukončení relace ve frontě a selhání. |
Find failure msg from 'Try' block |
Tato akce Filtrovat pole vytvoří pole ze vstupů a výstupů ze všech akcí uvnitř Try oboru na základě zadaných kritérií. V tomto případě tato akce vrátí výstupy z akcí, jejichž výsledkem byl Failed stav. Podrobnosti najdete v tématu Vyhledání chybové zprávy z bloku Try. |
Select error details |
Tato akce Vybrat vytvoří pole, které obsahuje objekty JSON na základě zadaných kritérií. Tyto objekty JSON jsou vytvořené z hodnot v poli vytvořeném předchozí akcí Find failure msg from 'Try' block . V tomto případě tato akce vrátí pole, které obsahuje objekt JSON vytvořený z podrobností o chybě vrácených předchozí akcí. Podrobnosti najdete v tématu Výběr podrobností o chybě. |
Terminate |
Tato akce Ukončit zastaví spuštění pracovního postupu, zruší všechny probíhající akce, přeskočí všechny zbývající akce a vrátí zadaný stav, ID relace a chybu vyplývající z Select error details akce. Podrobnosti najdete v tématu Ukončení aplikace logiky. |
Dokončení šablony
Pokud chcete zadat hodnoty triggeru a akcí v šabloně Korelované doručování v pořadí pomocí relací služby Service Bus , postupujte podle těchto kroků. Před uložením aplikace logiky musíte zadat všechny požadované hodnoty označené hvězdičkou (*).
Inicializace relace
Pro trigger Při přijetí zprávy ve frontě (peek-lock) zadejte tyto informace, aby šablona mohla inicializovat relaci pomocí vlastnosti ID relace , například:
Poznámka
Zpočátku je interval dotazování nastavený na tři minuty, aby se aplikace logiky nespouští častěji, než očekáváte, a aby se neúčtoly neočekávané poplatky. V ideálním případě nastavte interval a frekvenci na 30 sekund, aby se aplikace logiky aktivovala okamžitě při přijetí zprávy.
Vlastnost Požadováno pro tento scénář Hodnota Popis Název fronty Yes <název_fronty> Název dříve vytvořené fronty služby Service Bus. V tomto příkladu se používá Fabrikam-Service-Bus-Queue. Typ fronty Ano Hlavní Vaše primární fronta služby Service Bus ID relace Ano Další k dispozici Tato možnost získá relaci pro každé spuštění triggeru na základě ID relace ze zprávy ve frontě služby Service Bus. Relace je také uzamčená, takže žádná jiná aplikace logiky nebo jiný klient nemůže zpracovávat zprávy související s touto relací. Následující akce pracovního postupu zpracují všechny zprávy, které jsou přidružené k dané relaci, jak je popsáno dále v tomto článku. Tady jsou další informace o dalších možnostech ID relace :
- Žádné: Výchozí možnost, která má za následek žádné relace a nedá se použít k implementaci sekvenčního vzoru konvoje.
- Zadejte vlastní hodnotu: Tuto možnost použijte, pokud znáte ID relace, které chcete použít, a chcete pro toto ID relace vždy spustit trigger.
Poznámka: Konektor služby Service Bus může najednou uložit omezený počet jedinečných relací od Azure Service Bus do mezipaměti konektoru. Pokud počet relací překročí tento limit, staré relace se z mezipaměti odeberou. Další informace najdete v tématech Výměna zpráv v cloudu pomocí Azure Logic Apps a Azure Service Bus.
Interval Yes <Počet intervalů> Počet časových jednotek mezi opakováními před vyhledáním zprávy. Frekvence Yes Sekunda, minuta, hodina, den, týden nebo měsíc Časová jednotka opakování, která se má použít při kontrole zprávy. Tip: Pokud chcete přidat časové pásmo nebo počáteční čas, vyberte tyto vlastnosti ze seznamu Přidat nový parametr .
Další informace o triggeru najdete v tématu Service Bus – Při přijetí zprávy ve frontě (peek-lock). Trigger vypíše ServiceBusMessage.
Po inicializaci relace pracovní postup pomocí akce Inicializovat proměnnou vytvoří logickou proměnnou, která se na začátku nastaví na false
hodnotu a označuje, kdy jsou splněny následující podmínky:
Žádné další zprávy v relaci nejsou k dispozici ke čtení.
Zámek relace již není nutné obnovovat, aby bylo možné dokončit aktuální instanci pracovního postupu.
Dále v bloku Try pracovní postup provede akce s první přečtenou zprávou.
Zpracování počáteční zprávy
První akce je zástupná akce služby Service Bus , Odeslání počáteční zprávy do tématu, kterou můžete nahradit jakoukoli jinou akcí, která má zpracovat první zprávu z relace ve frontě. ID relace určuje relaci, ze které zpráva pochází.
Zástupná akce Service Bus odešle první zprávu do tématu služby Service Bus, které je určeno vlastností ID relace . Tímto způsobem budou všechny zprávy, které jsou přidružené ke konkrétní relaci, procházet do stejného tématu. Všechny vlastnosti ID relace pro následné akce v této šabloně používají stejnou hodnotu ID relace.
V akci Service Bus dokončete počáteční zprávu ve frontě, zadejte název fronty služby Service Bus a všechny ostatní výchozí hodnoty vlastností v akci ponechte.
V akci Service Bus odpusťte počáteční zprávu z fronty, zadejte název fronty služby Service Bus a všechny ostatní výchozí hodnoty vlastností ponechte v akci.
Dále zadáte potřebné informace pro akce, které následují po akci Dokončit počáteční zprávu ve frontě . Začnete akcemi ve smyčce Zatímco ve frontě je pro relaci více zpráv .
Zatímco ve frontě je pro relaci více zpráv
Tato smyčka Until spouští tyto akce, když zprávy existují ve frontě nebo dokud uplyne jedna hodina. Pokud chcete změnit časový limit smyčky, upravte hodnotu vlastnosti Časový limit smyčky.
Získejte další zprávy z fronty, dokud zprávy existují.
Zkontrolujte počet zbývajících zpráv. Pokud zprávy stále existují, pokračujte ve zpracování zpráv. Pokud neexistují žádné další zprávy, pracovní postup nastaví proměnnou
isDone
natrue
a ukončí smyčku.
V akci Service Bus zadejte název fronty Service Bus v části Získání dalších zpráv z relace. V opačném případě ponechte v akci všechny ostatní výchozí hodnoty vlastností.
Poznámka
Ve výchozím nastavení je maximální počet zpráv nastavený na
175
hodnotu , ale tento limit je ovlivněn vlastností velikost a maximální velikost zprávy ve službě Service Bus. Další informace najdete v tématu Velikost zprávy pro frontu.Dále se pracovní postup rozdělí do těchto paralelních větví:
Pokud při kontrole dalších zpráv dojde k chybě nebo selhání, nastavte proměnnou
isDone
natrue
.Možnost Zpracovat zprávy, pokud dostaneme nějakou podmínku, zkontroluje, jestli je počet zbývajících zpráv nulový. Pokud existuje false a další zprávy, pokračujte ve zpracování. Pokud existuje hodnota true a žádné další zprávy, pracovní postup nastaví proměnnou
isDone
natrue
.
V části Pokud je false smyčka For each zpracovává každou zprávu v pořadí fifo (first-in, first-out). V nastavení smyčky je nastavení Řízení souběžnosti nastavené na
1
, takže se najednou zpracuje jenom jedna zpráva.V případě akcí služby Service Bus zadejte název fronty dokončení zprávy ve frontě a opuštění zprávy ve frontě. Zadejte název fronty Service Bus.
Po dokončení relace ve frontě je více zpráv pracovní postup nastaví proměnnou
isDone
natrue
.
V dalším kroku zadáte potřebné informace pro akce ve smyčce Obnovit relaci až do zrušení .
Prodloužit uzamčení relace, dokud se nezruší
Tato smyčka Until zajišťuje, že tato aplikace logiky drží zámek relace, zatímco ve frontě existují zprávy nebo dokud spuštěním těchto akcí netrvá jedna hodina. Pokud chcete změnit časový limit smyčky, upravte hodnotu vlastnosti Časový limit smyčky.
Zpoždění 25 sekund nebo doba, která je menší než doba vypršení časového limitu uzamčení zpracovávané fronty. Nejmenší doba trvání zámku je 30 sekund, takže výchozí hodnota je dostatečná. Počet spuštění smyčky ale můžete optimalizovat odpovídající úpravou.
Zkontrolujte, jestli
isDone
je proměnná nastavená natrue
.Pokud
isDone
je nastavená hodnotatrue
, pracovní postup stále zpracovává zprávy, takže pracovní postup obnoví zámek relace ve frontě a znovu zkontroluje podmínku smyčky.Musíte zadat název fronty služby Service Bus v akci Service Bus Obnovit zámek relace ve frontě.
Pokud
isDone
je nastavená hodnotatrue
, pracovní postup neobnoví zámek relace ve frontě a smyčku ukončí.
Prodloužení zámku relace ve frontě
Tato akce Služby Service Bus obnoví zámek relace ve frontě, zatímco pracovní postup stále zpracovává zprávy.
V akci Service Bus zadejte název vaší fronty Service Bus v části Obnovit zámek relace ve frontě.
V dalším kroku zadáte potřebné informace pro akci Služby Service Bus : Zavřete relaci ve frontě a uspějete.
Zavření relace ve frontě a úspěšné dokončení
Tato akce Service Bus zavře relaci ve frontě poté, co pracovní postup dokončí zpracování všech dostupných zpráv ve frontě, nebo pracovní postup opustí počáteční zprávu.
V akci Service Bus zadejte název fronty a zavřete relaci ve frontě a uspějete.
Následující části popisují akce v oddílu Catch
, které zpracovávají chyby a výjimky, ke kterým dochází v pracovním postupu.
Zavření relace ve frontě a selhání
Tato akce Service Bus se vždy spustí jako první akce v Catch
oboru a zavře relaci ve frontě.
V akci Service Bus zadejte název fronty a zavřete relaci ve frontě a dojde k selhání.
Dále pracovní postup vytvoří pole, které má vstupy a výstupy ze všech akcí v Try
oboru, aby aplikace logiky získala přístup k informacím o chybě nebo selhání, ke kterému došlo.
Vyhledání chybové zprávy z bloku Try
Tato akce Filtrovat pole vytvoří pole, které má vstupy a výstupy ze všech akcí uvnitř Try
oboru na základě zadaných kritérií pomocí result()
funkce . V tomto případě tato akce vrátí výstupy z akcí se Failed
stavem pomocí equals()
funkce a item()
funkce.
Tady je definice JSON pro tuto akci:
"Find_failure_msg_from_'Try'_block": {
"inputs": {
"from": "@Result('Try')",
"where": "@equals(item()['status'], 'Failed')"
},
"runAfter": {
"Close_the_session_in_the_queue_and_fail": [
"Succeeded"
]
},
"type": "Query"
},
V dalším kroku pracovní postup vytvoří pole s objektem JSON, které obsahuje informace o chybě v poli vrácené z Find failure msg from 'Try' block
akce.
Výběr podrobností o chybě
Tato akce Vybrat vytvoří pole obsahující objekty JSON na základě vstupního pole, které je výstupem z předchozí akce Find failure msg from 'Try' block
. Konkrétně tato akce vrátí pole, které má pouze zadané vlastnosti pro každý objekt v poli. V tomto případě pole obsahuje název akce a vlastnosti výsledku chyby.
Tady je definice JSON pro tuto akci:
"Select_error_details": {
"inputs": {
"from": "@body('Find_failure_msg_from_''Try''_block')[0]['outputs']",
"select": {
"action": "@item()['name']",
"errorResult": "@item()"
}
},
"runAfter": {
"Find_failure_msg_from_'Try'_block": [
"Succeeded"
]
},
"type": "Select"
},
Pak pracovní postup zastaví spuštění aplikace logiky a vrátí stav spuštění spolu s dalšími informacemi o chybě nebo selhání, ke kterému došlo.
Ukončení spuštění aplikace logiky
Tato akce Ukončit zastaví spuštění aplikace logiky a vrátí Failed
stav spuštění aplikace logiky spolu s ID relace a chybou vyplývající z Select error details
akce.
Tady je definice JSON pro tuto akci:
"Terminate": {
"description": "This Failure Termination only runs if the Close Session upon Failure action runs - otherwise the LA will be terminated as Success",
"inputs": {
"runError": {
"code": "",
"message": "There was an error processing messages for Session ID @{triggerBody()?['SessionId']}. The following error(s) occurred: @{body('Select_error_details')['errorResult']}"
},
"runStatus": "Failed"
},
"runAfter": {
"Select_error_details": [
"Succeeded"
]
},
"type": "Terminate"
}
},
Uložení a spuštění aplikace logiky
Po dokončení šablony teď můžete aplikaci logiky uložit. Na panelu nástrojů návrháře vyberte Uložit.
Pokud chcete otestovat aplikaci logiky, odesílejte zprávy do fronty Service Bus.
Další kroky
- Další informace o triggerech a akcích konektoru Service Bus