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