/ / Spring-integration / ActiveMQ subskrybuj wiele miejsc docelowych w jednym wątku - wielowątkowość, activemq, integracja sprężynowa

Spring-integration / ActiveMQ subskrybuj wiele miejsc docelowych w jednym wątku - wielowątkowość, activemq, integracja sprężynowa

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:

  1. Uruchom mój wątek przetwarzania, który czyta z kolejki blokującej, umieść wszystkie odebrane wiadomości w tej kolejce.

  2. Wysyłaj wszystkie odebrane wiadomości do jednego miejsca docelowego i korzystaj z nich.

Ktoś ma lepsze pomysły?

Odpowiedzi:

1 dla odpowiedzi № 1

Uż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ę.