2017-02-21 30 views
0

Я искал решение 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 подберет его и обработает, а не один из каждого кластера, как я и ищу. Если я использую тему, то каждый экземпляр в каждом кластере получит сообщение, поэтому мне не кажется, что это то, что я ищу.

Вот и все. Мысли? Заранее спасибо!

+0

Если вы использовали Weblogic как ваш EE-сервер и MDB в качестве слушателя, то вы можете использовать Темы и указать «One Copy for Application» для достижения того, чего хотите. «https://docs.oracle.com/cd/E17904_01/web.1111/e15493/dist_topics.htm#WLMDB10081 – ramp

ответ

0

Мы использовали тему, чтобы решить эту проблему. Поэтому вместо очереди JMS используйте тему JMS. Попросите все веб-приложения на всех кластерах подписаться на эту тему. У нас также есть компонент для записи, чтобы все они могли писать на эту тему.

Смежные вопросы