Балансировка нагрузки подписчиков темы Tibco EMS
У меня есть подписчик на тему Tibco EMS, который мне нужен для распределения нагрузки между различными экземплярами. Каждое опубликованное сообщение в теме должно быть получено одним (и только одним) экземпляром каждой группы баланса нагрузки подписчика.
Просто используя глобальные темы и сбалансированные связи EMS (tcp://localhost:7222|tcp://localhost:7224
) приводит к тому же сообщению, полученному всеми экземплярами каждой группы баланса нагрузки подписчика, что приводит к дублированию.
Знаете ли вы альтернативу балансировке нагрузки для подписчиков тем?
3 ответа
Вы можете:
A) Соедините тему с очередью и перенастройте своих подписчиков для чтения из очереди. Очереди ведут себя по-разному, поскольку сообщения получают только один подписчик, а не все.
Б) Создайте количество постоянных подписчиков по теме с помощью селекторов, которые делят сообщения между товарами длительного пользования. Например, если сообщение имеет свойство 'id', которое последовательно увеличивается:
create durable topic DURABLENAME1 selector="(id - 2 * (id / 2)) = 0"
create durable topic DURABLENAME2 selector="(id - 2 * (id / 2)) = 1"
Селектор является только по модулю, поэтому половина сообщений будет передаваться на одном длительном, а половина - на другом.
В EMS 8.0 добавлена новая концепция общей подписки, при которой только одна подписка получает сообщения с одинаковым именем подписки, просматривают документы руководства пользователя EMS, это может вам помочь.
Хотя оба предыдущих ответа верны, однако наиболее естественным подходом было бы вообще не использовать темы.
Использование очередей вместо pf the mes делает всю работу (распределение нагрузки в циклическом режиме).