Rodzaje komunikatów MQ

Autor: Marcin Kasiński
21.01.2011 13:24:00 +0200

W przypadku komunikacji poprzez MQ rozróżniamy kilka rodzajów komunikatów. Komunikat REQUEST określa komunikat będący zapytaniem do innego systemu. Jako przykład można tu przytoczyć aplikacje, która pobiera z innego systemu dane o kliencie. W takim przypadku wysyła ona komunikat z zapytaniem o konto klienta. Kiedy taki komunikat z zapytaniem dotrze do tego docelowego systemu, wysyła on (docelowy system) w odpowiedzi komunikat z danymi o kliencie, z typem komunikatu ustawionym na REPLY. Typ REPLY to drugi typ komunikatu określający, że dany komunikat jest odpowiedzią na odebrane przez aplikacje zapytanie. Przy tego typu komunikacji (REQUEST-REPLY) należy jeszcze określić na jakie zapytanie dany komunikat jest odpowiedzią. Używa sie do tego dwóch parametrów komunikatów JMS, MessageId oraz CorrelationId. Kiedy aplikacja wysyła zapytanie menadzer kolejek ustawia w nim parametr MessageId, określający identyfikator komunikatu. Następnie kiedy aplikacja do której komunikat był skierowany odczyta go i będzie chciała wysłać odpowiedź, to przy wysyłce poza ustawieniem typu komunikatu na REPLY, przepisze z zapytania parametr MessageId do parametru CorrelationId odpowiedzi. Operacja taka nazywa się korelacją. W ten sposób aplikacja, która odbierze komunikat REPLY, przez analizę jego parametru CorrelationId będzie wiedziała, jaki jest identyfikator wysłanego przez nią komunikatu REQUEST, do którego odnosi sie ta odpowiedź. Biorąc pod uwagę kwestie projektowe mamy dwie możliwości implementacji takiej komunikacji. Pierwszy sposób, to podejście synchroniczne. Polega ono na tym, ze aplikacja po wysłaniu komunikatu typu REQUEST odczytuje jego parametr MessageId, następnie przy pobieraniu komunikatu z kolejki wejściowej, określa, żeby nie pobierać pierwszego komunikatu z kolejki, tylko komunikat, którego parametr CorrelationId równa się wcześniej odczytanemu parametrowi MessageId z zapytania. Drugim rozwiązaniem jest podejście asynchroniczne. Polega ono na tym, że jednym wątkiem są wysyłane komunikaty REQUEST i do współdzielonej pamięci zapisywane są dane tych komunikatów, wraz z ich identyfikatorem, innym natomiast są pobierane po kolei wszystkie komunikaty, a następnie procesowanie komunikatów typu REPLY poprzedzone zostaje sprawdzeniem we wspomnianej wcześniej pamięci współdzielonej na jakie zapytanie jest to odpowiedź.

Innym rodzajem typu komunikatu jest typ DATAGRAM. Określa on komunikat standardowy nie powiązany z żadnym innym. Może być on użyty (i najczęściej tak się dzieje) np. przy wysyłaniu komunikatu synchronizacyjnego informującego o zmianach jakie nastąpiły w systemie macierzystym, a co może zainteresować inne systemy. Jest to przykład typowej komunikacji asynchronicznej.

W przypadku pobierania komunikatów z kolejki mamy możliwość określenia, czy operacja ta ma być blokująca, czy nie. Oznacza to, czy w przypadku operacji odczytu komunikatu z kolejki i braku w niej komunikatów aplikacja ma czekać na pojawienie się komunikatu przez jakiś czas, czy czekać aż komunikat się pojawi, czy w takiej sytuacji natychmiast powrócić z metody z błędem informującym, że w kolejce nie ma żadnych komunikatów.

Parametry komunikatów

powrót
Zachęcam do przedstawienia swoich uwag i opinii w polu komentarzy.

Komentarze

Dodaj Komentarz