2009-01-31 9 views
5

Mam obecnie kontener tomcat - działający na nim serwlet nasłuchujący żądań. Potrzebuję wyniku żądania HTTP, aby zostać przesłane do kolejki zadań, które następnie zostanie przetworzone asynchronicznie. Chcę, aby każda "praca" była utrwalana w wierszu w DB w celu śledzenia i odzyskiwania w przypadku awarii. Dużo czytałem. Oto moje opcje (uwaga: do wszystkiego muszę używać rzeczy open-source).Przetwarzanie asynchroniczne w Javie z serwletu

1) JMS - używać ActiveMQ (ale który jest konsumentem w pracy w tym przypadku inny aplet)

2) Czy moja prośba utworzyć wiersz w DB?. Miej oddzielny serwlet w moim kontenerze Tomcat, który zawsze działa - używa Quartz Scheduler lub narzędzi podanych w java.util.concurrent, aby nieprzerwanie przetwarzać wiersze jako zadania (używa łączenia wątków).

Pochylam się do tego drugiego, ponieważ przeglądanie dokumentacji JMS daje mi ból głowy i chociaż wiem, że jest to solidniejsze rozwiązanie, muszę wdrożyć to stosunkowo szybko. Nie przewiduję dużych ilości obciążenia we wczesnych dniach wdrażania tego serwera w każdym przypadku.

Wiele osób twierdzi, że wiosna może być dobra na 1 lub 2. Jednak nigdy nie użyłem Springa i nie wiedziałbym nawet, jak zacząć go używać, aby rozwiązać ten problem. Wszelkie wskazówki na temat tego, jak nurkować bez konieczności ponownego napisania całego mojego projektu, byłyby użyteczne.

W przeciwnym razie, gdybyś mógł rozważyć opcję 1 lub 2, które również byłyby przydatne.

Wyjaśnienie: Proces asynchroniczny polegałby na zeskanowaniu strony internetowej innej firmy i wysłaniu powiadomienia o wiadomości do pierwotnego requestera. Witryna internetowa strony trzeciej jest nieco niestabilna i powolna, dlatego jest obsługiwana jako proces asynchroniczny (kilka wbudowanych prób). Będę także ściągał pliki z tej strony i zapisywał je w S3.

Odpowiedz

4

Twoja praca kwarcowa nie musi być serwletem! Możesz utrzymywać przychodzące zadania w DB i mieć Quartz, gdy uruchomisz główny serwlet. Praca kwarcowa może być prostym POJO i okresowo sprawdzać bazę danych dla każdego zadania.

Proponuję jednak rzucić okiem na wiosnę. Nie trudno się nauczyć i easy to setup within Tomcat. Możesz znaleźć wiele dobrych informacji w Spring reference documentation. Ma integrację Quartz, co jest znacznie łatwiejsze niż robienie tego ręcznie.

+0

Polecam również Wiosna zarówno dla Quartz harmonogramów i wiadomości JMS. To znacznie uprości kod. – kgiannakakis

1

Odpowiednie rozwiązanie, które nie wymaga dużego nakładu pracy nad programowaniem, polega na utworzeniu obiektu, który będzie potrzebny później w aplecie i serializacji go do tablicy bajtów. Następnie umieść to w polu BLOB w bazie danych i zrób to.

Następnie wątek przetwarzania może po prostu odczytać zawartość, deserializować ją i pracować z poprawionym obiektem.

Ale można uzyskać lepsze odpowiedzi, opisując, co trzeba system faktycznie zrobić :)

+0

To bardzo dobry pomysł. Prawdopodobnie zadziałałoby to dla mnie, ponieważ obiekt, który chciałbym przechowywać w bazie danych, po prostu przechowuje informacje o tym, jak uzyskać dostęp do witryny docelowej strony trzeciej i ma unikalny identyfikator, dzięki czemu mogę skierować go z powrotem do użytkownika. – Ish