Мне нужно общее руководство с моим потребительским дизайном ActiveMQ.В настоящее время у меня есть постоянный потребитель тем, для которого прослушиватель сообщений зарегистрирован для асинхронного приема сообщений.Эти сообщения принимаются в течение транзакционного сеанса.После получения этих сообщений я передаю их в очередь в другом потоке, который периодически обрабатывает и отправляет эти сообщения другому сервису.Если доставка службы прошла успешно, я фиксирую сеанс.
Меня беспокоит то, что потребитель получает сообщения одновременно с моей очередью отправки.Таким образом, в то время, когда сообщения A и B отправляются в другую службу, сообщение C поступило к потребителю.Затем, когда я вызываю commit, я думаю, что я непреднамеренно фиксирую сообщение C.
Как я могу контролировать, какие сообщения связаны с транзакцией?
Если бы вместо этого я получал синхронно, используя MessageConsumerМетод .receive (), исключая MessageListener, я думаю, я мог бы лучше контролировать границы транзакций.Перед отправкой своей очереди я должен был прервать любые вызовы receive (), отправить текущий пакет, а затем возобновить прием и пакетирование после коммита / отката.
Кто-нибудь может подтвердить эту идею или дать совет по дизайну?Спасибо!
Редактировать: рассмотреть это решение , только с транзакционным сеансом и фиксацией вместо подтверждения