Я использую Spring AMQP с асинхронным обменом сообщениями. Моя модель предполагает, что есть два приложения A и B, как производители, так и потребители.
- A отправляет запрос на задание B и начинает прослушивание.
- B прослушивает запрос на задание и, когда он приходит, запускает задание и периодически отправляет сообщения о ходе выполнения A.
- B отправляет сообщение о завершении задания A после завершения задания.
- A потребляет сообщения о ходе выполнения до тех пор, пока не придет сообщение о завершении задания, после чего A существует.
Я использую @RabbitListener
на уровне класса и @RabbitHandler
на уровне метода для обработки сообщений. Все работает хорошо, дизайн чистый, мне нравится решение Spring.
Моя проблема в том, что я понятия не имею, как обнаружить и как действовать, когда A ожидает получить сообщение о ходе выполнения от B (любое сообщение), а оно не приходит. Есть ли тайм-аут для таких случаев? Если да, то как реализовать метод обратного вызова?
Я нашел некоторые настройки таймаута, но они обычно работают для самого соединения или только при использовании шаблона RPC (один запрос один ответ).
Желаемое решение: A должен получать сообщение о ходе выполнения каждую минуту. Если сообщение о ходе выполнения не используется, скажем, в течение 3 минут, я хочу отменить задание.