Witam
W projekcie mam dodawanie użytkownika do systemu, typowa prosta sprawa. Dodatkowo podczas tej operacji ma być wykonywane dodawanie użytkownika do zewnętrznego systemu. Wszystko to jest zaimplementowane w oparciu o kolejkę JMS.
Kolejka działa na takiej zasadzie , że wykonuje zapytanie do zewnętrznego serwisu, w sytuacji gdy wykonanie się nie powiedzie, zapisuje informacje o błędzie w tabeli, a następnie powtarza próbę 3 razy. Jeśli po 3 razie wywołanie zwróci błąd, wtedy wiadomośc trafia do kolejki DLQ i tam wiadomość zostaje zalogowana.
Wszystko działa bardzo dobrze, pojawia się tylko problem z implementacją aktualizacji rekordu (update)
Inaczej mówiąc, może zdarzyć się sytuacja gdzie w kolejce będzie istniała wiadomość typu 'update' oraz wiadomość 'create', gdzie update będzie się chciało wykonać przed create.
Jak sobie poradzić z taką sytuacją ? Jakieś pomysły ?
Ustawienie mojej kolejki (hornetQ) :
<address-settings>
<address-setting match="jms.queue.#">
<dead-letter-address>jms.queue.dlq.dev.AsyncTaskDLQueue</dead-letter-address>
<redelivery-delay>60000</redelivery-delay>
<max-delivery-attempts>3</max-delivery-attempts>
</address-setting>
</address-settings>