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