Здесь есть два вопроса
1.У вас есть два менеджера транзакций
Из-за следующих двух строк в вашей конфигурации компонента Camel ActiveMQ вы настраиваете два менеджера транзакций.Это является источником проблем.
activeMQComponent.transacted = true // activates local JMS transactions
activeMQComponent.transactionManager = txManager() // additional tx manager
, если вы просто хотите использовать транзакции из ActiveMQ, вам не нужно настраивать диспетчер транзакций Spring .
Этих двух строк вашей конфигурации достаточно для получения локальных транзакций с вашим брокером ActiveMQ.
activeMQComponent.transacted = true
activeMQComponent.lazyCreateTransactionManager = false
Так что вам следует удалить эту строку, а также весь компонент txManager
activeMQComponent.transactionManager = txManager()
Если вы в настоящее время устанавливаете флаг транзакции в своих маршрутах на верблюде, вы должны также удалить это.И, как я писал, ваши маршруты, использующие ActiveMQ, все еще обрабатываются, даже если вы удалите все это.
2.Повторная доставка не работает
Вы не опубликовали свои маршруты Camel, но в соответствии с выводом ошибки я предполагаю, что брокер не выполняет повторную доставку, поскольку ошибка обрабатывается Camel .
Это обработчик ошибок Camel o.a.camel.processor.DefaultErrorHandler
, который срабатывает, когда возникает ошибка, и поскольку она обрабатывает ошибку, сообщение передается брокеру и, следовательно, повторная доставка не происходит.
Попробуйте отключить обработку ошибок Camel, чтобы проверить, доставляет ли брокер сообщения об ошибках.
errorHandler(noErrorHandler());