apache-camel помещает массовые сообщения в JMS - PullRequest
0 голосов
/ 27 мая 2019

Я настраиваю проект, в котором массовая фиксация JMS должна быть выполнена за один раз.Используя транзакцию для перезапуска обработки сообщений, вам нужно подумать о том, как поместить число сообщений «х» в очередь JMS и выполнить фиксацию JMS.

В настоящее время я создаю сообщение JMS с длинной строкойдобавлено с сообщением, которое я хочу зафиксировать в одном кадре.Затем используйте Splitter, чтобы разделить сообщение на несколько в другом маршруте.Наконец, используйте другой маршрут для отправки сообщений в JMS (как массовый коммит).

    <route>
        <from uri="file:sample"/>
        <split streaming="true">
            <tokenize token="\n"/>
            <to uri="activemq:queue:dest"/>
        </split>
    </route>

Я хочу построить маршрут, который контролирует, когда будет выдан коммит JMS.

ИспользованиеДело в том, что я пытаюсь прочитать сообщение из очереди А и создать много сообщений (пусть это число будет «х»).И поместите их в очередь B. Однако я хочу выполнить массовую фиксацию (или пакетную фиксацию), такую ​​как DB.Пытаюсь быть эффективным, чтобы не создавать подключения к JMS и делать отдельные коммиты.

1 Ответ

1 голос
/ 27 мая 2019

Я не до конца понимаю вашу проблему.Возможно, дело только в том, какую обработку ошибок использовать.

Настройка: у вас есть маршрут Camel с транзакционным JMS-потребителем , и по этому маршруту вы отправляете несколько сообщений в одноили другие очереди .

Хороший случай: маршрут успешно завершен и все сообщения JMS доставлены.

Случай ошибки: если ваш маршрут сталкивается с ошибкой , скажем, в середине обработки, некоторые сообщения JMS уже "отправлены", некоторые не .

В этом случае вообще никаких сообщений не отправляется , поскольку Camel выполняет откат, а уже "отправленные" сообщения JMS на самом деле не отправляются или, если быть более точным, они еще не совершено , и они не будут совершены.

Важная деталь: Верблюд не должен обрабатывать ошибку .Если это так, ошибка не передается посреднику, и, следовательно, использованное сообщение фиксируется, как и транзакция JMS.

...