Что бы ни делал ваш код, он может быть прерван в любой момент из-за внешнего сбоя. Сам JRE не имеет гражданства;нет автоматического способа возобновления в определенный момент. Сам код должен быть «перезагруженным». То есть он должен сохранять состояние для некоторого внешнего, долговременного сервиса. Если этот код модифицирует внешние ресурсы (вызов веб-службы, базы данных, ...), он также должен каким-то образом синхронизировать свое сохраненное состояние с внешним ресурсом при перезапуске.
RabbitMQ может помочь с некоторыми аспектами - этоГарантированная доставка сообщения автобусом. Это может обеспечить доставку сообщений на внешний ресурс. Он также может синхронизировать между несколькими запущенными экземплярами вашего кода, если вы хотите распределенное приложение с поддержкой кластеров, что сложно сделать.