Обработка сообщений очереди (например, JMS в WebLogic) в зависимости друг от друга в кластерных системах

Я разрабатываю систему SOA, которая обрабатывает сообщения, поступающие от внешних систем. Внешние сообщения приходят в точном порядке, как они должны быть. Проблема возникает с моей частью системы обработки. Например, у меня есть сообщения message_1, message_2, message_3, message_4. Все сообщения, кроме message_1, зависят от message_1. Но поскольку сообщения обрабатываются асинхронно, существуют случаи, когда message_2 или message_3 выполняются перед message_1. Эти случаи включают в себя тяжелые задачи, включая доступ к БД, поэтому может быть несколько задержек перед завершением выполнения. Также эти задачи выполняются в кластерных системах. Таким образом, проблема становится еще шире при установке в этих системах. Однако хорошей новостью является то, что система очереди сообщений (в нашем случае JMS) является единой для всех кластерных систем, то есть глобальной.

Поэтому возникает вопрос: есть ли хорошие варианты использования или решения для таких проблем обработки, зависящих друг от друга сообщений или данных в кластерных или асинхронных системах? Может быть, есть решения с блокировкой любого ресурса (файл, дБ или объект ejb/lock)? или блокировка сообщения JMS?

Используемые технологии: Oracle SOA Suite с BPEL, Java EE 6, Oracle OSB, Oracle WebLogic 10.3 с JMS, Oracle DB 11g, JDeveloper 11.

Любая помощь будет оценена. Заранее спасибо.

1 ответ

Вы можете использовать посредник для повторного упорядочивания сообщения, здесь есть ссылка на правый раздел руководства разработчика oracle http://docs.oracle.com/cd/E17904_01/integration.1111/e10224/med_resequencer.htm

Другие вопросы по тегам