Кластер Websphere Application Server и потребление сообщений JMS - PullRequest
1 голос
/ 03 января 2012

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

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

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

Ответы [ 2 ]

0 голосов
/ 04 января 2012

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

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

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

0 голосов
/ 03 января 2012

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

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

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

...