2012-01-03 3 views
1

Мы разрабатываем приложение, которое будет развернуто в кластере WAS. Приложение расходует сообщения с нескольких очередей JMS (Websphere MQ) и записывает результаты в одну базу данных.Распространение сообщений кластера приложений Websphere и JMS

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

Итак, есть ли способ настройки приложения/кластера/активации-спецификации для достижения этого?

ответ

0

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

При этом один из способов сделать это - использовать группы сообщений. Экземпляр приложения, ищущий новую группу, должен игнорировать любые сообщения, в которых JMSXGroupID не является 1. Приложения, отправляющие сообщения, должны быть готовы соответственно установить идентификатор группы и порядковые номера.

Другой способ добиться этого - перехват и отправка. Программа читает основную очередь, ища новые экземпляры идентификатора. Когда он видит новый идентификатор, он перемещает это сообщение в отдельную очередь отправки. Все экземпляры приложения-потребителя считывают очередь отправки, ища работу. Поскольку идентификаторы в этой очереди гарантированно уникальны, каждый идентификатор присваивается конкретному экземпляру приложения. Затем приложение открывает основную очередь, используя селектор для идентификатора, который будет обработан. Приложения-производители должны установить идентификатор в качестве свойства сообщения или в поле «Идентификатор корреляции», чтобы сделать выбор возможным, но им не нужно управлять группами.

0

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

У нас есть MDB, который мы хотим обработать только один запрос время для всего кластера, поэтому мы устанавливаем «Максимальные совпадающие конечные точки» в Спецификации активации на 1.

Так что, возможно, вы могли бы использовать другой пункт назначения для этого идентификатора или иметь логику первоначального адресата для повторной очереди идентификатора к этому второму пункту назначения?

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