Я искал решение JMS, и я (на удивление) не смог найти простой ответ. Возможно, я искал неправильную вещь, поэтому, надеюсь, сообщество в stackoverflow может помочь.Несколько кластеров, прослушивающих одну и ту же очередь сообщений JMS
Что я работаю, должно быть довольно простым: использование JMS для уведомления о событиях в кластерах микросервисов. Настройка проста. Предположим, у меня есть 3 кластера, каждый из которых имеет три экземпляра, каждый из которых работает отдельно от своих экземпляров сервера EE на разных машинах.
Cluster A
A1, A2, A3
Cluster B
B1, B2, B3
Cluster C
B1, B2, B3
И у меня есть центральный сервер JMS, который имеет очередь все они слушают:
A1, A2, A3 |
B1, B2, B3 |<-------> JMS Queue (Q1)
C1, C2, C3 |
Microservice например A2 обрабатывает запрос и публикует сообщение (M) на (Q1). Я хочу, чтобы для каждого из других кластеров - B, C - один экземпляр в этом кластере собирает сообщение и обрабатывает его для кластера. Очевидно, не имеет значения, какой экземпляр выбирает его, пока он обрабатывается только один раз для каждого кластера. Так это будет выглядеть
A2 | ---> publish (M) ----> JMS Queue (Q1)
B2 |
| <---- (M) <----- JMS Queue (Q1)
C1 |
Это кажется очень общим, почти по умолчанию настройки, что все будут нужны. Но до сих пор то, что я нашел при работе с очередями, заключается в том, что однажды (M) будет опубликовано в (Q1), тогда только один из B1, B2, B3, C1, C2, C3 подберет его и обработает, а не один из каждого кластера, как я и ищу. Если я использую тему, то каждый экземпляр в каждом кластере получит сообщение, поэтому мне не кажется, что это то, что я ищу.
Вот и все. Мысли? Заранее спасибо!
Если вы использовали Weblogic как ваш EE-сервер и MDB в качестве слушателя, то вы можете использовать Темы и указать «One Copy for Application» для достижения того, чего хотите. «https://docs.oracle.com/cd/E17904_01/web.1111/e15493/dist_topics.htm#WLMDB10081 – ramp