2014-02-17 3 views
1

В моем приложении есть два потока: один, который асинхронно считывает сообщения из очереди MQ и отправляет их в блок обработки, а второй - извлекает информацию из блока обработки и помещает связанных сообщений в очереди отправителя. Проблема в том, что следующие сообщения извлекаются и отправляются на процессор до завершения предыдущего потока вывода сообщений, и это неверно с точки зрения приложения. Поскольку сообщения могут быть найдены в очереди в любое время для обработки, нежелательно читать сообщения синхронно.Обработка сообщений от IBM MQ по одному в JMS

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

Заранее благодарю за консультацию/помощь.

+0

Просьба подробно рассказать о том, как вы хотите, чтобы приложение действовало. Ваш вопрос указывает, что вы не хотите синхронно читать сообщения, но также, что поведение, присущее асинхронной обработке, нежелательно. – cschneid

ответ

2

Это проблема синхронизации. Я бы установил механизм сигнализации, когда слушатель сообщения отправляет сообщение, полученное от MQ, на процессор и ждет события. Выходной поток после отправки сообщения в очередь вывода сигнализирует о событии. Как только сигнализируется, слушатель сообщения ожидает следующего сообщения из очереди.

1

Я мог бы понять вопрос до некоторой степени ... Похоже, что все, что вы хотите сделать, это удерживать прослушиватель сообщений на какое-то время, пока не будет завершена другая деятельность. Слушатель сообщений может использовать селектор, который получает сообщения, которые имеют состояние свойства = ГОТОВ. Когда выходной поток завершается, он может получить сообщение из очереди и установить состояние READY. По умолчанию, если это свойство не установлено в сообщении, слушатель сообщения не будет выбирать это сообщение.

Смежные вопросы