WebSphere MQ, vzdálené posílání zpráv
Chystám teď do firmy takovou kumulovanou prezentaci o Enterprise Integration Patterns (EIP), WebSphere MQ (WMQ) a WebSphere Message Brokeru (WMB), tak bych se chtěl postupně podělit o pár konceptů. První z nich je koncept remote messaging na WMQ.Následující příklad předpokládá již hotovou instalaci WMQ a je zaměřen na komunikaci dvou instancí WMQ - jedna je na lokálním a jedna na vzdáleném prostředí. Pro vyzkoušení, nebo prezentaci je možné použít i jenom jedinou, lokální instanci. Nejdřív si na úvod definujeme základní komponenty, které bude potřeba vytvořit, a které spolu budou komunikovat:Queue ManagerSprávce front vlastní a spravuje fronty, kanály a další objekty. Je to první WMQ objekt, který je nutné na čisté instalaci vytvořit. Správce umožňuje další objekty vytvářet, konfigurovat, spouštět, vypínat atd. Pro přístup k frontám a zprávám poskytuje queue manager dvě rozhraní (API):Message Queue Interface (MQI) - proprietární rozhraní umožňující kompletní přístup k WMQ.Java Message Service (JMS) - Java specifikace pro asynchronní messaging.QueueDatová struktura pro ukládání zpráv. V našem příkladu budeme používat čtyři typy front:Local queue - lokální fronta pro ukládání zpráv.Remote queue - definice fronty, která je vlastněná jiným queue managerem.Transmission queue - (lokální fronta,) dočasné úložiště zpráv určených pro vzdáleného queue managera.Dead-letter queue - lokální fronta určená pro nedoručitelné zprávy.Message ChannelPoskytuje jednosměrnou komunikační cestu pro přenos zpráv z jednoho queue manageru na druhý. Skládá se ze tří částí:odesílající Message Channel Agent (MCA),přijímající MCA,komunikační spojení.Na odesílajícím konci je vyžadována transmission queue.Architektura vzdáleného posílání zprávBarevně jsou vyznačeny nově vytvářené objekty. V případě, že existuje pouze jedna (lokální) instance WMQ, je možné oba queue managery vytvořit lokálně. Obecný postup vytvoření objektů je následující:Vytvoření queue managera.Vytvoření dead-letter queue.Vytvoření local (remote) queue.Vytvoření transmission queue.Vytvoření message channelu.(Spuštění sender message channelu.)Jelikož nejde o tutoriál, nebudu popisovat vytvoření jednotlivých objektů - to je dobře popsáno v dokumentaci. Pouze bych zde zmínil, že všechny uvedené objekty lze vytvořit dvěma způsoby - buď pomocí grafického rozhraní MQ Explorer (velice snadné), nebo pomocí MQ Script Commands (MQSC).Výsledná architektura vypadá takto:V uvedeném příkladu se zprávy vkládají do fronty SENDER a jsou přenášeno do fronty RECEIVER. Testovací zprávy je možné jednoduše do front vkládat, procházet a mazat pomocí již zmiňovaného MQ Exploreru (opět viz dokumentace). Pokud chcete zaměstnat i dead-letter queue, vložte zprávu do transmission queue QM_JPRASE, objeví se ve frontě DLQ na správci QM_REMOTE (transmission queue vyžaduje speciální hlavičku, která při běžném vložení zprávy do fronty není vyplněná).A k čemu je to vůbec dobré, posílat zprávu z jednoho queue managera na jiný? Jenom čistě pro posílání zpráv to samozřejmě smysl nemá - na to by stačily fronty definované v rámci jednoho queue managera, ke kterým by se připojovali komunikující konzumenti a provideři.Smysl to začíná dávat v momentě, pokud potřebuje komunikovat více queue managarů, např. z důvodů high availability, škálovatelnosti apod.