У меня есть клиент, который получает сообщения из очереди. В настоящее время у меня есть MessageListener
, который реализует onMessage()
.Могу ли я отправить сообщение прямо в очередь?
После получения сообщения он обрабатывается далее, затем сохраняется в базе данных по методу onMessage()
; клиент затем подтверждает получение сообщения.
Пока база данных не работает, проблем нет. Но если БД не работает, клиент не будет признавать.
Чтобы удовлетворить это, я хочу, чтобы клиент отправлял запланированные запросы в очередь для любых непризнанных сообщений через запланированные промежутки времени.
Как бы то ни было, единственный способ сделать это - перезапустить клиент, который не идеален. Есть ли способ вызвать очередь для повторной отправки неподтвержденного сообщения без перезапуска?
Что я имею в onMessage()
:
//code to connect to queue
try {
if (DB is available){
//process message
//save required details to DB
msg.acknowledge();
}
else{
//schedule to request same message later from queue
}
} catch (Exception e) {}
Если база данных не работает, почему бы не подождать, пока она не появится, прежде чем пытаться продолжить. Таким образом, нет необходимости переписывать сообщения –
Вы имеете в виду блок до тех пор, пока БД не встанет? Я не уверен, что все в порядке ... если я не понял ваш комментарий. – gkinu
Что произойдет, если вы заблокируете базу данных? Есть ли в этой теме что-то более важное? ;) Если это произойдет, у меня будет более важная работа в другом потоке, сеансе или соединении. –