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