Как расставить приоритеты сообщений в разных очередях?

Проблема распределения/расстановки приоритетов ресурсов.

Я работаю над приложением Java EE, в котором есть несколько компонентов, управляемых сообщениями (MDB), которые получают сообщения из разных очередей JMS, скажем, очередь A/MDB A и очередь B/MDB B для простоты.

При высокой нагрузке системе необходимо отдавать приоритет сообщениям, поступающим в очередь A, а не сообщениям в очереди B. Почему? Сообщения в очереди A должны обрабатываться как можно быстрее, поэтому MDB A требуются «все» ресурсы db, процессора и т. д.

Есть ли у вас какие-либо советы о том, как решить эту проблему чистым способом? Не так чисто тоже может работать...

Мой рабочий сервер — WebSphere Application Server 7, использующий SIBus для доставки сообщений. WebSphere MQ может быть вариантом.

Спасибо за любые предложения!


person DagR    schedule 10.01.2012    source источник
comment
Не уверен на 100% в этом, но разве приоритет JMS Message не должен справиться с этим? (Я не уверен, обрабатывается ли приоритет для каждой очереди или механизма обмена сообщениями)   -  person Aviram Segal    schedule 11.01.2012
comment
@AviramSegal Я предположил, что приоритет сообщений JMS обрабатывается для каждой очереди, но теперь я сомневаюсь. Я не могу найти ответ на этот вопрос...   -  person DagR    schedule 12.01.2012
comment
Спецификация не очень ясна, я постараюсь проверить это позже сегодня   -  person Aviram Segal    schedule 12.01.2012


Ответы (1)


После изучения этой проблемы с людьми, которые являются экспертами в этой области, я получил плохие новости:

Этого, наверное, нельзя делать.

100% не может быть выполнено с помощью SIB, вы можете расставлять приоритеты только для сообщений в пределах одного пункта назначения.

Что касается WebSphere MQ, также кажется, что это невозможно сделать, они имеют только свойства для приоритета очереди при работе с одной очередью в кластере, что, я думаю, вам не поможет.

Так что, к сожалению, это, вероятно, невозможно сделать, если вам нужно расставить приоритеты сообщений, вам может потребоваться немного изменить свою архитектуру. Возможно одиночная очередь с селектором. Затем вы можете расставить приоритеты для сообщений определенного типа.

person Aviram Segal    schedule 12.01.2012
comment
Спасибо! Это то, что я предполагал, так что нет большой проблемы. Я справляюсь с этим, временно приостанавливая MDB, когда глубина очереди достигает порога в определенной очереди (как вы могли догадаться stackoverflow.com/questions/8819169/) - person DagR; 13.01.2012