Мы используем Apache Camel для запуска некоторых процессов в наших приложениях, например:
from("quartz2://sometThing/someQueue?cron=0+0+4+?+*+MON-SUN").setBody(constant(""))
.routeId(this.getClass().getSimpleName())
.to("jms:some-trigger-queue");
У нас есть группа процессоров из очереди запуска для выполнения каждого задания, например:
from("jms:some-trigger-queue")
.processRef("someProcessor");
Некоторые из этих процессоров, в свою очередь, будут записывать сообщения в очереди JMS. Проблема, которую я пытаюсь исправить, состоит в том, что процессоры не передадут сообщения JMS посреднику, пока весь процесс не будет завершен. Я подозреваю, что это связано с тем, что в очереди триггера есть сообщение в полете («jms: some-trigger-queue»), и поскольку процессоры используют тот же контекст, который они не будут фиксировать, пока сообщение в полете не будет очищено (к вашему сведению пытался принудительно создать новые транзакции внутри процессоров, но безуспешно как я могу настроить верблюд так, чтобы он запускал процессор и сразу же двигался дальше (т. е. чтобы убрать триггерное сообщение из полета)?