В настоящее время я разрабатываю систему, которая использует асинхронную обработку. Передача информации осуществляется с помощью очередей. Таким образом, один процесс поместит информацию в очередь (и завершит ее), а другой подберет ее и обработает. Моя реализация ставит меня перед рядом проблем, и мне интересно, как все подходят к этим проблемам (с точки зрения архитектуры, а также библиотек).
Позвольте мне нарисовать картину. Допустим, у вас есть три процесса:
Process A -----> Process B
|
Process C <-----------|
Таким образом, Процесс A помещает сообщение в очередь и завершает работу, Процесс B принимает сообщение, обрабатывает его и помещает в очередь "возврата". Процесс C получает сообщение и обрабатывает его.
- Как справиться с тем, что Процесс B не прослушивает и не обрабатывает сообщения из Очереди? Есть ли какой-то метод типа JMS, который не позволяет производителю отправлять сообщение, когда потребитель не активен? Таким образом, Процесс A отправит запрос, но выдаст исключение.
- Предположим, что Процесс C должен получить ответ через X минут, но Процесс B остановлен (по какой-либо причине). Существует ли какой-либо механизм, обеспечивающий тайм-аут в очереди? ? Таким образом, гарантированный ответ в течение X минут запускает Процесс C.
Можно ли решить все эти вопросы с помощью какой-то очереди недоставленных писем? Должен ли я, возможно, делать все это вручную с помощью таймеров и проверки. Я упомянул JMS, но я открыт ко всему, на самом деле я использую Hazelcast для очередей.
Обратите внимание, что это скорее архитектурный вопрос с точки зрения доступных технологий и методов Java, и я считаю, что это правильный вопрос.
Любые предложения будут очень признательны.
Спасибо