Pracuję nad PoC dla małego silnika procesowego opartego na Camelu. Wymagania to możliwość wykonania zestawu kroków konsekwencji, a każda z nich może potencjalnie zająć kilka godzin. Asynchroniczny styl komunikacji jest oczywistym wyborem w tym przypadku, ale mam problem z uzyskaniem części "procesowej".Podejście do obsługi długotrwałych procesów z Camelem
Wysyłając wiadomość do zewnętrznego systemu, muszę poczekać na zakończenie. Dopóki może to zająć dużo czasu, myślę o zatrzymaniu przetwarzania konkretnego kroku po wysłaniu wiadomości, a następnie o rozpoczęciu nowego "zadania" po otrzymaniu wiadomości o zakończeniu. Przetwarzanie dosłownie każdego kroku będzie traktowane jako trasa wielbłądów rozpoczynająca się w tej samej kolejce JMS, a następnie router oparty na treści zdecyduje, która konkretna logika powinna zostać wykonana na podstawie nagłówków wiadomości lub jej treści.
Problem polega jednak na tym, jak uniknąć potencjalnej utraty komunikatów. Na przykład w konkretnym kroku wysyłam wiadomość i kończę przetwarzanie. System zewnętrzny z jakiegoś powodu nie przetworzył wiadomości, więc mój system nie otrzymał żadnego powiadomienia. Oznacza to, że proces utknął, chyba że jakiś inny składnik wygeneruje komunikat, aby go obudzić.
Tak długo, jak system może być wyłączony w dowolnym momencie, muszę zbudować logikę, aby kontynuować przetwarzanie komunikatów po restarcie (co implikuje pewien rodzaj trwałości komunikatu, ponownego dostarczenia i strategii zarządzania transakcjami).
Wszystkie te problemy łączą się, dlatego chciałbym poprosić Camel Champions o sugestie, jak zaprojektować tego rodzaju logikę za pomocą Camela. Wiem, że dedykowany produkt BPM lub ESB może poradzić sobie z tym problemem o wiele łatwiej, ale nie chcę rozbudowywać tego rozwiązania.
Wszelkie porady są mile widziane, zwłaszcza jeśli chodzi o możliwości Camel, które mogą pomóc w uproszczeniu rozwiązania.