Получение двух потребителей в JmsListenerContainerFactory для последовательной обработки сообщений.JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Получение двух потребителей в JmsListenerContainerFactory для последовательной обработки сообщений.

Сообщение Anonymous »

У меня есть класс, реализующий JmsListenerContainerFactory со следующими параметрами:

Код: Выделить всё

factory.setSessionTransacted(true);
factory.setConcurrency("1");
factory.setAutoStartup(true);
И еще один класс типа AtomikosConnectionFactoryBean со следующим параметром:

Код: Выделить всё

atomikosfactory.setMaxPoolSize(2);
У меня также есть две очереди, каждая из которых обрабатывается одним потребителем:

Код: Выделить всё

@JmsListener(containerFactory = "jmsListenerContainerFactory", destination = "${queue-one}")
@Transactional
public  void handleOne(final Message message)
{
final var payload = message.getPayload();
final var handler = getHandler(payload.getClass(););
handler.handleOne(payload);
}

@JmsListener(containerFactory = "jmsListenerContainerFactory", destination = "${queue-two}")
@Transactional
public  void handleTwo(final Message message)
{
final var payload = message.getPayload();
final var handler = getHandler(payload.getClass(););
handler.handleTwo(payload);
}
К сожалению, оба обработчика должны иметь доступ к одной и той же записи в базе данных. В настоящее время это приводит к неожиданному поведению, поскольку оба пытаются получить к нему доступ одновременно. Я ищу способ убедиться, что они выполняются последовательно, а не одновременно.
Я пытался заставить свои методы handleOne и handleTwo вызывать один и тот же метод. который был помечен тегом @Synchronized, чтобы они никогда не запускались одновременно. Это работало постольку, поскольку одна из транзакций откатывалась при попытке доступа к ресурсу, но к тому времени уже выполнялись некоторые операции, откат которых невозможен. Позднее это привело к ошибкам, когда поток попытался запуститься снова после освобождения ресурса.

Подробнее здесь: https://stackoverflow.com/questions/791 ... ages-seque
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»