Fronty, témata a odběry služby Service Bus
Azure Service Bus podporuje sadu cloudových middlewarových technologií orientovaných na zprávy, včetně spolehlivého řazení zpráv do fronty a odolného zasílání zpráv pro publikování a přihlášení k odběru. Tyto možnosti zprostředkované zasílání zpráv si můžete myslít jako funkce odděleného zasílání zpráv, které podporují scénáře publikování a odběru, časového oddělení a vyrovnávání zatížení pomocí úlohy Service Bus zasílání zpráv. Oddělená komunikace má mnoho výhod. Klienti a servery se mohou například připojovat podle potřeby a provádět své operace asynchronním způsobem.
Entity zasílání zpráv, které tvoří jádro možností zasílání zpráv v Service Bus jsou fronty, témata a odběry a pravidla/akce.
Fronty
Fronty nabízejí doručování zpráv FIFO (First In, First Out) jednomu nebo více konkurenčním spotřebitelům. To znamená, že příjemci obvykle přijímají a zpracovávají zprávy v pořadí, ve kterém byly přidány do fronty. A každou zprávu přijímá a zpracovává jenom jeden příjemce zpráv. Klíčovou výhodou používání front je dočasné oddělení komponent aplikace. Jinými slovy, producenti (odesílatelé) a příjemci (příjemci) nemusí odesílat a přijímat zprávy současně. Je to proto, že zprávy jsou trvale uložené ve frontě. Producent navíc nemusí čekat na to, až příjemce odpoví, aby zprávy dál zpracovával a odesílal.
Související výhodou je vyrovnávání zatížení, které umožňuje producentům a spotřebitelům odesílat a přijímat zprávy různými rychlostmi. V mnoha aplikacích se zatížení systému v průběhu času mění. Doba zpracování potřebná pro každou jednotku práce je ale obvykle konstantní. Zprostředkující producenti a spotřebiteli zpráv s frontou znamená, že spotřebitelské aplikace musí být schopny zvládnout pouze průměrné zatížení místo zatížení ve špičce. S měnící se příchozí zátěží se mění hloubka fronty. Tato funkce přímo šetří peníze v souvislosti s objemem infrastruktury potřebným ke službě zatížení aplikace. S tím, jak se zatížení zvyšuje, je možné přidat další pracovní procesy ke čtení z fronty. Každou zprávu zpracovává jen jeden pracovní proces. Toto vyrovnávání zatížení na základě vyžádané instalace navíc umožňuje co nejlepší využití pracovních počítačů i v případě, že pracovní počítače zpracovávají zprávy o vyžádané napájení vlastním maximálním tempem. Tomuto chování se často říká konkurence mezi spotřebiteli.
Použití front k přechodu mezi producenty zpráv a spotřebiteli poskytuje inherentní volné párování mezi komponentami. Vzhledem k tomu, že producenti a spotřebiteli si nejsou vzájemně vědomi, lze konzumenta upgradovat, aniž by to mělo nějaký vliv na producenta.
Vytváření front
Fronty můžete vytvářet pomocí Azure Portal, PowerShellu, CLInebo Resource Manager šablon. Potom odešlete a přijímáte zprávy pomocí klientů napsaných v C#, Javě, Pythonua JavaScriptu.
Režimy příjmu
Můžete zadat dva různé režimy, ve kterých Service Bus zprávy přijímá.
- Přijmout a odstranit . Když v tomto režimu Service Bus příjemce obdrží požadavek, označí zprávu jako spotřebovanou a vrátí ji aplikaci příjemce. Tento režim je nejjednodušší model. Funguje nejlépe ve scénářích, ve kterých aplikace dokáže tolerovat, že nezpracována zpráva, pokud dojde k selhání. Pokud chcete tomuto scénáři porozumět, zvažte scénář, ve kterém příjemce vydá požadavek na přijetí a pak ho před zpracováním zhroutí. Protože Service Bus zprávy jako spotřebovává, začne aplikace zprávy po restartování používat. Bude chybět zpráva, kterou spotřeboval před chybou.
- Náhled zámku. V tomto režimu se operace příjmu stane dvoustupňovou, což umožňuje podporovat aplikace, které nesnášejí tolerování chybějících zpráv.
Najde další zprávu, která se má použít, uzamkne ji, aby ji ostatní spotřebiteli obdrželi, a pak tuto zprávu vrátí do aplikace.
Jakmile aplikace dokončí zpracování zprávy, vyžádá si Service Bus, aby dokončila druhou fázi procesu příjmu. Potom služba označí zprávu jako spotřebovanou.
Pokud aplikace z nějakého důvodu nedokáže zprávu zpracovat, může požádat službu Service Bus, aby zprávu opustila. Service Bus zprávu odemkne a znovu ji zpřístupní pro přijetí stejným příjemcem nebo jiným konkurenčním příjemcem. Za druhé je k zámku přidružený časový limit. Pokud se aplikaci nepodaří zprávu zpracovat před vypršením časového limitu uzamčení, Service Bus zprávu odemkne a znovu ji zpřístupní k přijetí.
Pokud aplikace po zpracování zprávy dojde k chybě, ale předtím, než požádá službu Service Bus o dokončení zprávy, Service Bus po restartování zprávu předá aplikaci. Tento proces se často nazývá alespoň jedno zpracování. To znamená, že každá zpráva se zpracuje aspoň jednou. V některých situacích se ale může doručit stejná zpráva znovu. Pokud váš scénář nemůže tolerovat duplicitní zpracování, přidejte do aplikace další logiku pro detekci duplicit. Další informace najdete v tématu Detekce duplicit. Tato funkce se označuje jako právě jednou zpracování.
Poznámka
Další informace o těchto dvou režimech najdete v tématu Settling receive operations.
Témata a odběry
Fronta umožňuje zpracování zprávy jedním příjemcem. Na rozdíl od front poskytují témata a odběry komunikaci typu 1:M ve vzoru publikování a přihlášení k odběru. Je užitečná pro škálování na velký počet příjemců. Každá publikovaná zpráva je dostupná pro každý odběr zaregistrovaný v tématu. Publisher odešle zprávu do tématu a jeden nebo více odběratelů obdrží kopii zprávy v závislosti na pravidlech filtru nastavených u těchto odběrů. Odběry mohou pomocí dalších filtrů omezit zprávy, které chtějí přijímat. Vydavatelé odesílat zprávy do tématu stejným způsobem jako zprávy do fronty. Spotřebiteli se ale zprávy nezískají přímo z tématu. Místo toho spotřebiteli dostanou zprávy z odběrů tématu. Odběr tématu se podobá virtuální frontě, která přijímá kopie zpráv odesílaných do tématu. Spotřebiteli se zprávy z odběru přijímají stejně jako zprávy z fronty.
Funkce odesílání zpráv fronty se mapuje přímo na téma a funkce příjmu zpráv se mapuje na odběr. Tato funkce mimo jiné znamená, že předplatná podporují stejné vzory popsané výše v této části týkající se front: konkurenční příjemce, časové oddělení, vyrovnávání zatížení a vyrovnávání zatížení.
Vytvoření témat a odběrů
Vytvoření tématu se podobá vytvoření fronty, jak je popsáno v předchozí části. Témata a odběry můžete vytvářet pomocí šablon Azure Portal, PowerShellu, ROZHRANÍ příkazovéhořádku Resource Manager šablon. Potom odešlete zprávy do tématu a přijímáte zprávy z odběrů pomocí klientů napsaných v C#, Javě, Pythonua JavaScriptu.
Pravidla a akce
V mnoha scénářích musí být zprávy, které mají specifické charakteristiky, zpracovány různými způsoby. Pokud chcete toto zpracování povolit, můžete nakonfigurovat odběry tak, aby našly zprávy, které mají požadované vlastnosti, a pak provést určité úpravy těchto vlastností. Zatímco Service Bus odběry vidí všechny zprávy odeslané do tématu, do fronty virtuálního odběru můžete zkopírovat pouze podmnožinu těchto zpráv. Toto filtrování se provádí pomocí filtrů předplatného. Takové úpravy se nazývají akce filtru. Po vytvoření odběru můžete zadat výraz filtru, který pracuje s vlastnostmi zprávy. Vlastnosti mohou být systémové vlastnosti (například Popisek) i vlastní vlastnosti aplikace (například StoreName).) Výraz SQL filtru je v tomto případě volitelný. Bez výrazu SQL filtru se jakákoli akce filtru definovaná v odběru provádí u všech zpráv pro tento odběr.
Úplný funkční příklad najdete v ukázce TopicFilters na GitHub.
Další informace o filtrech najdete v tématu Filtry témat a akce.
Entity java message service (JMS) 2.0
Následující entity jsou přístupné prostřednictvím rozhraní API JMS (Java Message Service) 2.0.
- Dočasné fronty
- Dočasná témata
- Sdílená trvalá předplatná
- Nesdílená trvalá předplatná
- Sdílená ne trvanlivá předplatná
- Nesdílená trvalá předplatná
Přečtěte si další informace o entitách JMS 2.0 a o tom, jak je používat.
Další kroky
Vyzkoušejte si ukázky v jazyce podle vašeho výběru a prozkoumejte funkce Azure Service Bus.
- Ukázky Service Bus klientské knihovny Azure pro .NET (nejnovější)
- Ukázky Service Bus klientské knihovny Azure pro Javu (nejnovější)
- Ukázky klientských knihoven Azure Service Bus pro Python
- ukázky klientské knihovny pro Azure Service Bus pro JavaScript
- ukázky klientské knihovny pro Azure Service Bus pro TypeScript
Vyhledejte ukázky pro starší klientské knihovny .NET a Java níže: