Budujemy projekt integracji za pomocą Apache Camel (Camel 2.10.3, oparty na Java DSL).Jak wykryć przerwane/odzyskane połączenie JMS w Apache Camel?
Mamy trasę, która wyodrębnia dane z bazy danych (pozwala nazywać je IN_DB), wykonuje niektóre operacje logiczne i wstawia do innej bazy danych (OUT_DB) raz dziennie i inną trasę, która subskrybuje temat JMS dla danych XML, trochę logiki i wstawia ją do tej samej bazy danych (OUT_DB) w ciągu dnia.
Wymaganie jest takie, że gdy połączenie z tematem JMS z jakiegoś powodu zanika, kontynuujemy próbę ponownego połączenia w nieskończoność, a po pomyślnym ponownym połączeniu musimy wrócić do bazy danych (IN_DB) i wykonać inne obciążenie, aby wypełnić luka, w której temat nie działa.
Moje pytanie brzmi: jak możemy zrobić tę logikę ("Byłem podłączony, a następnie zostałem odłączony, a teraz jestem połączony ponownie") w Camel? Co dzieje się z trasą zaczynającą się od tematu, gdy temat zostanie przerwany, czy trasa się skończy? Czy może wysłać komunikat o błędzie do kolejki błędów? Czy muszę napisać własny przewodnik do monitorowania połączenia z tematem, czy też Camel automatycznie ponownie się połączy, gdy wątek pojawi się ponownie i ustawić nagłówek komunikatu, lub ustawić zmienną kontekstową, aby wskazać, że "Byłem podłączony, a następnie zostałem odłączony i teraz Jestem połączony ponownie "? Cieszę się, budując logikę trasy wokół wywoływania obciążenia bazy danych Nie mogę po prostu znaleźć najlepszego sposobu "wykrycia" w Camel, że ten scenariusz się wydarzył.
Wszelkie sugestie bardzo doceniane.
Dzięki Matt, kilka świetnych propozycji tutaj. Niestety, nie jesteśmy właścicielami tematów, które subskrybujemy (broker Tibco EMS) i łączymy się z kontami tylko do odczytu, co sprawia, że podejście bicie serca jest nieco trudne. Gdzie powinien zostać zrzucony wyjątek JMS? Sam komponent JMSComp lub pochłonięta z niego trasa? – Matt
Wygląda na to, że utknąłeś w opcjach! Nie mam przykładu do przekazania, ale detektor wyjątków jest zarejestrowany w połączeniu, więc wyjątek powinien zostać zgłoszony przez połączenie zamiast z jakiegoś miejsca na trasie. Twoją jedyną opcją jest regularne wysyłanie zapytań do IN_DB, aby sprawdzić, czy ma jakieś wiadomości, o których nie wiesz, ale podejrzewam, że to nie jest praktyczne. –