Używam wielu <si:service-activator>
"s i <jms:message-driven-channel-adapter>
aby subskrybować wiele kolejek i tematów. Wiadomości z każdego miejsca docelowego są odbierane w osobnym wątku, co oznacza, że mój kod odbiorczy jest pełen blokad w celu ochrony zmiennego stanu wewnętrznego.
Chciałbym, żeby mój kod odbiorczy był zablokowany. Czy jest możliwe skonfigurowanie spring-integration / activemq do odbioru z wielu miejsc docelowych w tym samym wątku?
Jeśli nie jest to możliwe, mogę wymyślić dwie alternatywy:
Uruchom mój wątek przetwarzania, który czyta z kolejki blokującej, umieść wszystkie odebrane wiadomości w tej kolejce.
Wysyłaj wszystkie odebrane wiadomości do jednego miejsca docelowego i korzystaj z nich.
Ktoś ma lepsze pomysły?
Odpowiedzi:
1 dla odpowiedzi № 1Użyj wzór wieloznaczny w jednej kolejce.
Oznacza to, że zamiast czytać z dwóch kolejek, użyj jednej kolejki i określ wszystkie kolejki, które chcesz odczytać w nazwie.
to jest: "QUEUE.NR1,QUEUE.NR2"
lub "SOME.PREFIX.>"
aby odczytać wszystkie kolejki z tym prefiksem. Twój kod klienta traktuje to jako pojedynczą kolejkę.