Spring Integration, адаптер входящего канала JMS и транзакции - PullRequest
1 голос
/ 20 мая 2011

Я использую SI, настроенный с помощью адаптера канала, управляемого сообщениями jms: Мой вариант использования - получить сообщение из очереди, сохранить его через JDBC в базе данных, зафиксировать сообщение из очереди, а затем позволить этому сообщению продолжать проходить через различные каналы в зависимости от его типа. Если сообщение впоследствии выдает ошибку, это нормально, так как оригинал хранится в базе данных, поэтому его можно воспроизвести.

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

Итак, есть ли простой способ извлечь сообщение из очереди JMS, сохранить в базе данных, затем зафиксировать его в очереди и начать новую транзакцию для оставшегося потока?

Спасибо!

Rich

1 Ответ

0 голосов
/ 20 мая 2011

Вы можете сохранить в базе данных, а затем поместить сообщение в канал для запроса:

<channel id="aChannel">
    <queue capacity="10"/>
</channel>

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

...