Aktualnie dodaje obsługę JMS do struktury podobnej do serwera aplikacji. JMS będzie implementowany przez HornetQ (samodzielny broker, słoiki hornetq na ścieżce klasy serwerów), ale nie ma ani JBoss, ani wiosny, ani niczego, co zapewniałoby MDB.Najlepsza praktyka przetwarzania wielowątkowych wiadomości w kolejkach JMS
Następnym krokiem jest dodanie detektora wiadomości do kolejki xa, która umożliwiłaby równoległe przetwarzanie wiadomości przychodzących. Niektóre komunikaty inicjowałyby długo działające zadania, więc podstawową ideą jest odrodzenie wątków roboczych z metody onMessage
.
Podczas mojej długiej podróży przez Internet natknąłem się na this discussion, gdzie jeden z uczestników wspomniał, że nie zrobiłby tego, ale użyłby dodatkowej wewnętrznej kolejki do zadania: (jeden gwintowany) słuchacz wiadomości, po prostu chwyciłby komunikaty z kolejki wejściowej i tworzenie nowych komunikatów dla wewnętrznej kolejki, gdzie na drugim końcu tej wewnętrznej kolejki niektóre wątki robocze walczą o wiadomości przychodzące. Wiadomości przychodzące będą wtedy potwierdzane, gdy zostaną "skopiowane" do wewnętrznej kolejki (co jest dla mnie w porządku).
Niestety nie mówią dlaczego byłoby lepiej, aby nie tarło wątków roboczych od sposobu onMessage
- Może dlatego, że słuchacz będzie blokować jeśli wszystkie wątki z puli są zajęte. Więc szukam plusów i minusów za projekty decyzji:
- uruchomić wątków roboczych od metody onMessage słuchacza komunikatów
- użyć kolejka wewnętrznego „Wysyłanie wiadomości do gwintów pracownik”