Состояние гонки ActiveMQ + NFS

Я использую ActiveMQ на кластере компьютеров для отправки сообщений между java-процессами.

Кластер имеет общее монтирование NFS, доступное со всех хостов.

У меня возникают проблемы со следующим сценарием:

  • хост A создает новый файл "/path/to/shared/nfs/xyz"
  • узел A отправляет сообщение узлу B: «process /path/to/shared/nfs/xyz»
  • хост B получает сообщение, пытается открыть файл
  • хост B выходит из строя, потому что клиент NFS еще не заметил, что новый файл был ранее создан на A (состояние гонки между ActiveMQ и протоколом NFS)

Мое решение состоит в том, чтобы добавить цикл во все приемники сообщений, которые будут ждать до 1 минуты, пока NFS поймет, что был добавлен новый файл.

Однако это решение кажется нечистым. Что было бы хорошим способом решить эту проблему? Знаете ли вы какие-либо применимые шаблоны проектирования корпоративной интеграции?


person Roman Zenka    schedule 25.10.2012    source источник
comment
Я предполагаю, что файл слишком велик для отправки через JMS? насколько это велико?   -  person Martin Serrano    schedule 26.10.2012


Ответы (1)


другая идея состоит в том, чтобы просто сделать хост B потребителем опроса файлов, который собирает все, что находится в «/path/to/shared/nfs/xyz», и обрабатывает его... таким образом, вам не нужны никакие сообщения от A чтобы B инициировал его, просто наличие файла.

вы можете легко сделать это, используя что-то вроде файлового компонента Apache Camel...

from("file://path/to/shared/nfs/xyz").to(...);
person Ben ODay    schedule 26.10.2012
comment
это мило. таким образом, используется только один протокол и нет состояния гонки. - person Martin Serrano; 27.10.2012