Поочередная обработка для очереди Oracle SOA JMS - PullRequest
0 голосов
/ 07 февраля 2019

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

Я пытаюсь добиться этого с помощью процесса менеджера bpel, который сначала будет удерживать сообщения, есличто-то уже обрабатывается в бэкэнде, а затем отправьте его, как только он поймет, что бэкэнд свободен.Этот подход будет работать, но наш архитектор хочет более чистого решения.Он предложил использовать очереди JMS.Идея состоит в том, чтобы очередь jms к сообщениям читалась amanger по одному, переходя к следующему только после того, как мы получим обратный вызов от бэкэнда, и мы знаем, что составной экземпляр и экземпляр bpel завершены.Я искал интернет в течение нескольких недель, но не смог найти работающее решение на основе jms для своего требования.

Я попробовал предложения для этой ссылки , но включил устройствосвойств порядка и подтверждения ничего не делает.

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Привет, Джонар,

В моей компании мы всегда используем очереди JMS для асинхронного обмена сообщениями.Например, вы можете сделать со сборкой таймера задержки в вашем композитном наборе значение 1 час 15 минут, и это будет работать большую часть времени, но это будет грязно.Вся идея заключается в том, чтобы любой асинхронный процесс запускался, когда сообщение помещалось в его цель очереди (указанную в очереди JMS).Адаптер JMS в композите вашего проекта заберет сообщение из очереди, когда он сможет свободно обрабатывать очередь.Ваша цель - поместить сообщение в очередь и забрать его с помощью адаптера.Он будет знать, какое сообщение выбрать, потому что вы указываете, какие очереди он слушает в адаптере.

В следующем сообщении в блоге Джона-Брауна Эванса описан весь процесс с первого шага.Это может быть немного утомительно, но я нашел это очень полезным.Он использует SOa Suite 11g вместо более распространенного в настоящее время 12c, но его основы остаются прежними.

Потрясающее руководство по очереди JMS

Надеюсь, это сработает для вас!

Приветствия,

Jesper

0 голосов
/ 27 февраля 2019

Попробуйте этот подход!Используйте управляемый событиями процесс bpel.

Используйте флаг базы данных в качестве следующего триггера.(флаг ИСТИНА)

  1. jms Адаптер получает первое сообщение из очереди.Здесь используйте задержку в адаптере, так как вы ожидаете, что bpel будет работать долго.используйте настройку ниже.

    <binding.jca config="MyServiceInboundQueue_jms.jca"> <property name="minimumDelayBetweenMessages">10000</property> <property name="singleton">true</property> </binding.jca>

  2. если флаг == TRUE в БД приводит к тому, что адаптер БД продолжает процесс bpel, иначе пропустите bpel.

  3. флаг пометки == ЛОЖЬ
  4. вызов бэкэнд-системы
  5. обратный вызов получен через час.
  6. установка флага == ИСТИНА
...