V tomto článku o BizTalku si budeme hrát na dirigenty a vyzkoušíme si, jak se v prostředí Visual Studia .NET tvoří orchestrace. Probereme sadu nejzákladnějších nástrojů a podíváme se, jak sestavit aplikaci, umístit ji na server a spustit. Článek je plný obrázků přímo z vývojového prostředí…

Založení nového projektu

BizTalk obsahuje celou řadu modulů, které jsou integrovány přímo do vývojového prostředí Visual Studio .NET. První viditelnou změnou je dialog New Project, který nyní obsahuje složku se čtyřmi typy BizTalk projektů. Po vytvoření prázdného projektu obvykle ihned vedou kroky vývojáře do dialogu Add New Item, který obsahuje jednotlivé typy souborů, které může projekt obsahovat. Středobodem BizTalku jsou zajisté orchestrace, nebudeme se tedy zdržovat a vrhněme se na ně.

Spuštění a zastavení aplikace

BizTalk je (jak lze vytušit) vlastně služba systému, běžící na pozadí a vykonávající svou úlohu. Při instalaci BizTalku se vám nainstalují také patřičné moduly do Visual Studia, ve kterém vyvíjíte své aplikace. Každý BizTalk projekt se (stejně jako jiné projekty) zkompiluje do .NET assembly. Zkompilovanou aplikaci je třeba umístit na server (deploy). Při tomto procesu se vytvoří patřičné záznamy v databázi a kompiláty se umístí do GAC (Global Assembly Cache). Proto je požadováno, aby byl každý projekt podepsán (strong-named). Posléze se musí jednotlivé orchestrace přenést na hostitelský stroj, na kterém ve finále poběží (enlist), a spustit (start). Přitom se vygenerují také porty, které jsme si dříve nakonfigurovali, a spojí se s danými orchestracemi. Všechny tyto úlohy lze provádět pomocí nového okna ve Visual Studiu, které se nazývá BizTalk Explorer.

BizTalk Explorer

Toto malé okénko je vlastně hlavním řídícím panelem, díky němuž můžeme mimo jiné také pracovat s porty přímo na serverech – vytvářet a rušit je, povolit či zakázat, měnit jejich parametry a přiřazovat je orchestracím.

Pokud chceme některou aplikaci aktualizovat, nebo prostě smazat, musíme zastavit všechny její orchestrace (stop) a odstranit je z hostitelských počítačů (un-enlist). Pak teprve můžeme celou aplikaci úplně odstranit (undeploy).

Životní cyklus orchestrace

Jak již bylo řečeno, nová instance orchestrace vzniká buď voláním z jiné orchestrace, nebo aktivací jejího vstupního portu. V každé případě by orchestrace měla přijmout nějakou vstupní zprávu, kterou pak zpracovává. Během zpracování může spustit další synchronní či asynchronní proces, na jehož výsledek může či nemusí počkat, a pokračovat dále. Jakmile orchestrace doběhne na konec, je její instance ukončena a uvolněna z paměti (a z databáze).

Orchestrace se může také při některých chybách zmrazit (suspend) a v tomto stavu čekat, než bude problém vyřešen. Díky použité architektuře může být zmrazených a čekajících orchestrací velké množství, aniž by okupovaly operační paměť, protože jsou odkládány do databáze a paměť je využívána pouze běžícími procesy.

Orchestration Designer

Každý proces někdy začíná a někdy taky končí a stejně tak to platí i pro orchestrace. Začátek je v designeru znázorněn nahoře, konec dole a mezi ně lze umisťovat jednotlivé moduly (shape). Po obou stranách je prostor pro umisťování portů, které se pak mohou linkami spojovat s přijímacími a odesílacími moduly.

Orchestration Designer - prázdná orchestrace

Moduly se vzájemně seřazují automaticky, nelze ovlivnit přesnou pozici jejich symbolů, ta je totiž dána pouze jejich sledem, vlastně celkovým uspořádáním orchestrace. Toto chování designéru lze přirovnal k flow layoutu, jehož protikladem je grid layout, ve kterém můžeme myší komponenty posunout libovolně tam, kam chceme. Tímto způsobem se naopak chovají porty, jejichž vertikální polohu lze upravit přesně dle našich potřeb.

Kromě samotné pracovní plochy orchestrace budeme velmi často používat také další okénka, která jsou zobrazena na dalším obrázku. Orchestration View je vlastně zobrazení některých objektů orchestrace ve stromové struktuře a Properties (ve VS.NET toto okno není žádnou novinkou) nám umožní upravovat vlastnosti těchto objektů.

Orchestration Designer - pracovní okna

Jaké moduly vlastně může orchestrace obsahovat? Představu vám poskytne následující obrázek, který zobrazuje všechny komponenty z Toolboxu.

Orchestration Designer - Toolbox

Popišme si funkci některých nejdůležitějších modulů. Ze všeho nejdříve si ukážeme práci s porty, příjímání a vysílání zpráv. K sestavení následující orchestrace je nutné vytvořit a nastavit několik dalších entit, které zde nejsou vidět. Jde hlavně o zprávu, se kterou orchestrace pracuje. Tu musíme vytvořit v okně Orchestration View a přiřadit jí nějaké schéma.

Orchestrace - příjímání a vysílání zpráv

Vlevo jsem umístil vstupní port, vpravo výstupní a uprostřed je vlastní tělo orchestrace, obsahující samotnou logiku. V našem případě vlastně žádná logika není, je zde pouze přijetí zprávy ze vstupního portu a její odeslání na výstupní port. Aby tato orchestrace mohla samostatně fungovat, musí být přijímací modul (Receive) nastaven jako aktivní, což znamená, že přijetí zprávy způsobí vytvoření nové instance orchestrace, která pak danou zprávu zpracuje.

Občas potřebujeme mít více možností, jak do orchestrace přijmout zprávu. Tedy je nutné mít více portů, které bude orchestrace sledovat. K tomu můžeme využít modul Listen, který obsahuje několik větví, z nichž každá zpracovává jeden vstup. BizTalk vybere a vykoná tu větev, jejíž první krok se podaří uskutečnit nejdříve. Tento první krok však může obsahovat pouze dva typy modulů, Receive nebo Delay. Jejich kombinací ve dvou větvích lze například vytvořit logiku, která čeká na doručení zprávy určitou dobu, a pokud zpráva není doručena, pokračuje se větví obsahující modul Delay – ten je totiž po vypršení nastavené doby považován za dokončený.

Orchestrace - modul Listen

Když v BizTalku vytváříme webovou službu, nejspíše si s jednosměrným portem nevystačíme. Webová služba nejen přijme požadavek, ale rovněž by na něj měla odpovědět. Proto existují také request-response porty, které obsahují obě operace zároveň. S těmito operacemi pak propojíme příslušné Receive a Send moduly. Porty mohou být dokonce ještě složitější a obsahovat ještě více operací.

Orchestrace - request-response port

Sekce ConstructMessage obsahuje moduly, které vytvářejí novou zprávu, a to přiřazením z nějakého ručně zapsaného výrazu (MessageAssignment) nebo transformací z jiné zprávy (Transform).

Orchestrace - sekce ConstructMessage

Orchestrace lze různě větvit. Modul Decide umožňuje BizTalku rozhodnout se pro tu větev, jejíž podmínka byla v daném kontextu vyhodnocena jako pravdivá. Modul ParallelActions naopak rozdělí běh orchestrace do několika vláken, přičemž všechna vlákna mohou pracovat souběžně. Celá sekce je pak považována za ukončenou až tehdy, když se ukončí všechna její vlákna.

Orchestrace - moduly Decide a ParallelActions

Scope definuje uvnitř orchestrace vnořenou transakci (transakcí může přitom být i celá orchestrace). Problematiku transakcí v BizTalku zde nehodlám více rozvádět. Modul Loop je již na první pohled samopopisný – umožňuje, aby se určitá část orchestrace opakovala, dokud bude dodržena určitá podmínka. Tu je třeba zapsat ručně.

Orchestrace - moduly Scope a Loop

Práce s adaptéry

Pro některé porty stačí port prostě nakonfigurovat a spustit, u některých adaptérů je ale situace trochu složitější. Například pro SOAP adaptér (webové služby) je nutné každý port vygenerovat pomocí Web Service Publishing Wizzardu, který vlastně pro daný port vygeneruje VS.NET solution s projektem, obsahujícím danou webovou službu. Jejím vyvoláním se pak port aktivuje. Vygenerovaný projekt je fyzicky umístěn do kořenového adresáře webového serveru a je ihned zkompilován, takže o tento krok se starat nemusíte.

Pro příjem MSMQ (message queue) zpráv se nevyužívá standardní Windows služba, ale speciální implementace tohoto protokolu, která je součástí BizTalk adaptéru. Pokud potřebujete na jednom počítači provozovat jak standardní MSMQ službu, tak i přijímat MSMQ zprávy do BizTalku, je nutné, aby tyto služby byly nakonfigurovány na jiné IP adrese, aby nedošlo ke kolizi. Jak toho docílit? BizTalk přemluvíte jeho Configuration Wizzardem, ve kterém lze tuto „drobnost“ nastavit, včetně registrace nové IP adresy do DNS a zařazení do Active Directory. Windows službu nakonfigurujete tak, že v registrech vytvoříte v klíči HKLMSOFTWAREMicrosoftMSMQParameters řetězcovou hodnotu BindInterfaceIP, které nastavíte příslušnou IP adresu.

Žádný příspěvek v diskuzi

Odpovědět