C/C++ / CGI / Sieć Novell / PHP / Java / SQL / Oracle / WebSphere MQ / WebSphere Message Broker / JavaScript / Humor / IT Quiz

Triggering

Triggering aplikacji

Często w przypadku komunikacji MQ aplikacja uruchamiana jest niezależnie od menadżera kolejek, łączy się z nim, czyta jej kolejki, procesuje komunikaty cały oczekując na nowe komunikaty w kolejce wejściowej. Istnieją jednak sytuacje, w których tego typu rozwiązanie można zastąpić bardziej odpowiednim. Wyobraźmy sobie sytuacje, kiedy komunikaty, które aplikacja musi przetworzyć pojawiają się w jej kolejce wejściowej bardzo rzadko. Może się okazać, że aby nie trzymać zasobów niewykorzystywanych, a to ma miejsce np., kiedy aplikacji przez długi czas oczekuje na kolejce na nowe komunikaty bez rezultatu, wskazane by było uruchomienie aplikacji w momencie pojawienia się komunikatu w kolejce. Taka uruchomiona aplikacja może przeczytać dany komunikat z kolejki przetworzyć go i inne znajdujące się w kolejce i rozłączyć się po zaraz po ich przetworzeniu lub po jakimś określonym w aplikacji czasie. Na tym właśnie polega triggering aplikacji.

Zasada działania
Za uruchomienie aplikacji, która ma być triggerowana, czyli uruchamiania w momencie pojawienia się komunikatu w kolejce odpowiada trigger monitor. Trigger Monitor to specjalny proces ( runmqtrm ), którego zadaniem jest czytanie specjalnej kolejki inicjującej w której menadżer kolejek umieszcza komunikaty zdarzenia informujące o tym, iż spełnione zostały warunki do uruchomienia odpowiedniej klienckiej aplikacji. Trigger monitor odczytuje te komunikatu i na podstawie informacji w nich zawartych uruchamia odpowiedni proces aplikacji, która po uruchomieniu czyta komunikatu w jej kolejce wejściowej.

Aby włączyć triggering danej aplikacji należy :

-Kolejkę wejściową aplikacji ustawić jako trigerowaną
-Utworzyć specjalną kolejkę w której zapisywane będą komunikaty inicjujące aplikację
-Utworzyć specjalny obiekt MQ reprezentujący aplikację, która będzie uruchamiana przez trigger monitor
-Uruchomić proces trigger monitora

Określenie kolejki jako triggerowanej
Z pojęciem triggerowania aplikacji związane są następujące atrybuty kolejki:

TRIGGER : Parametr oznacza włączenie triggerowanie danej kolejki
TRIGTYPE : Parametr oznacza sposób triggerowania kolejki i przyjmuje następujące wartości :

EVERY : Aplikacja będzie uruchamiana za każdym razem, kiedy w kolejce pojawi się komunikat

FIRST : Aplikacja będzie uruchamiana jeśli kolejka będzie pusta i pojawi się w niej nowy komunikat oraz żadna aplikacja nie będzie miała kolejkę otwartą do odczytu. Dodatkowo jeśli po czasie w milisekundach określonych w parametrze TRIGINT menadżer kolejek nie stwierdzi aby kolejka była otwarta do odczytu nowy komunikat inicjujący zostanie umieszczony w kolejce inicjującej.

DEPTH : Aplikacja zostanie uruchomiona jeśli w kolejce będzie odpowiednia ilość komunikatów. Ilość tą określa parametr TRIGDPTH

Przykładowo poniższa komenda mqsc tworzy kolejkę QUEUE.IN , która jest triggerowana. Komunikat inicjujący zostanie umieszczony w kolejce inicjującej QUEUE.INIT w momencie kiedy w kolejce będzie 10 komunikatów i nie będzie ona otwarta przez żadną aplikację do czytania. Trigger monitor w momencie pojawienia się zdarzenia ma uruchomić aplikacje opisaną w obiekcie MYAPP_PROCESS .

DEFINE QLOCAL (QUEUE.IN) +
PROCESS (MYAPP_PROCESS) +
INITQ (QUEUE.INIT) +
TRIGGER +
TRIGTYPE (DEPTH) + TRIGDPTH (10)


Utworzenie kolejki inicjującej
Proces tworzenie kolejki inicjującej nie różni się od tworzenia standardowej kolejki MQ. Zaleca się jedynie, aby triggerowanie działało poprawnie, ustawić tą kolejkę jako nie triggerowaną oraz aby zabronić czytania z niej wielu instancją aplikacji, tj. trigger monitora. Przykładowa komenda tworząca taką kolejkę może mieć postać:

DEFINE QLOCAL(QUEUE.INIT) +
NOSHARE +
NOTRIGGER


Utworzenie obiektu PROCESS
W celu określenia jaka aplikację trigger monitor ma uruchamiać w momencie pojawienia się komunikatu w kolejce inicjującej należy stworzyć specjalny obiekt PROCESS, którego argumenty to:

APPLTYPE : określa system operacyjny aplikacji, która ma być uruchamiana
APPLICID : określa ścieżkę uruchamianej aplikacji
USERDATA : określa dodatkowe argumenty dla uruchamianej aplikacji
Przykład tworzenia takiego obiektu PROCESS może mieć postać:

DEFINE PROCESS (MYAPP_PROCESS) +
DESCR ('My Application Process') +
APPLTYPE (UNIX) +
APPLICID ('/usr/local/myadapter') +
USERDATA ('mode debug')


Uruchomienie trigger monitora
W celu uruchomienia trigger monitora należy uruchomić proces runmqtrm z parametrami:

-m : nazwa menadżera kolejek, na której znajduje się kolejka inicjująca
-q : nazwa kolejki inicjującej, która ma być czytana przez trigger monitora
Przykład takiej komendy może mieć postać:

runmqtrm -m QMGR1 -q QUEUE.INIT

Triggering kanałów

W przypadku komunikacji pomiędzy kanałami również możemy zastosować triggering. Jako triggering mamy tu na myśli uruchamianie kanałów po zdarzeniu jakim jest pojawienie się komunikatu w kolejce transmisyjnej. W kolejce transmisyjnej znajdują się komunikaty które mają zostać przetransportowane do innego menadżera kolejek za pomocą kolejki zdalnej. Tu jak w przypadku można tak skonfigurować konały tak, aby po odpowiednim czasie były one zatrzymane i w ten sposób zwalniały zasoby do momentu kiedy znów będą potrzebne, tj., kiedy pojawi się nowy komunikat do przesłania pomiędzy menadżerami. Za ponowne uruchamianie kanałów odpowiada specjalny dedykowany proces o nazwie chanel initiator.

Aby zdefiniować triggering kanałów należy :

-Kolejkę transmisyjną połączyć i kolejką inicjującą
-Uruchomić proces channel initiator

Połączenie kolejki transmisyjnej z kolejką inicjującą
Z pojęciem triggerowania kanałów związane są następujące atrybuty kolejki transmisyjnej:

TRIGGER : Parametr oznacza włączenie triggerowanie kanału związanego z daną kolejką transmisyjną
INITQ : Parametr określa nazwę kolejki inicjującej w której znajda się komunikaty oznaczające pojawienie zdarzenia jakim jest komunikat wrzucony do pustej kolejki. Najczęściej parametr ten jest ustawiony na kolejkę systemową SYSTEM.CHANNEL.INITQ.
TRIGDATA : Parametr określa nazwę kanału do uruchomienia. W przypadku, kiedy to pole jest puste uruchomiony zostanie kanał, który jest związany z daną kolejką transmisyjną.
Przykładowa komenda tworząca kolejkę transmisyjną przystosowaną do triggerowania kanałów może mieć postać:

DEFINE QLOCAL(QMGR2) +
TRIGGER +
INITQ(SYSTEM.CHANNEL.INITQ) +
USAGE (XMITQ)


Uruchomienie procesu channel initiator
W celu uruchomienia procesu channel initiator należy uruchomić jego proces za pomocą konsoli tekstowej i polecenia START CHINIT . Jego najważniejszym argumentem jest INITQ określający nazwę kolejki inicjującej.

Przykład takiej komendy może mieć postać:

START CHINIT INITQ(SYSTEM.CHANNEL.INITQ)

Standardowy proces chanel initiator jest uruchamiany wraz z uruchomieniem menadżera kolejek i razem z menadżerem kolejek jest zatrzymywany.


Powrót


  Autorem serwisu jest Marcin Kasiński
Wszelkie prawa zastrzeżone. All rights reserved.
powered by technology... linux eclipse java php