У меня есть подписка на канал RSS через SuperFeedr, и в последнее время мы заметили много дубликатов уведомлений. Я дважды проверял подписки через веб-приложение, но я вижу только 1. Я также изучил, что верну правильный код ответа. В документации говорится, что в качестве ответа следует отправить 200, а структура повтора - через 5, 10 и 15 секунд, но в моих журналах я вижу, что дубликаты отправляются миллисекундами друг от друга, что заставляет меня думать, что это не повторы.Обработка дубликатов уведомлений от superfeedr
В первых строках моего doPost метода() являются:
response.setStatus(HttpServletResponse.SC_OK);
response.flushBuffer();
Попытки есть позволить superfeedr знать, что я получил сообщение, ПДТ по существу.
В качестве краткосрочного средства защиты я решил сохранить запись в хранилище данных, которое представляет «последнее сообщение».
Я знаю, что, как правило, в контексте сервлета вы не синхронизировались с самим экземпляром сервлета, потому что это вызывало бы очередь запросов, но в этом случае Superfeedr является единственным сервисом, использующим этот сервлет, он не потребляется обычными пользователями, так что это именно то, что я хочу, просто хотел убедиться, что не будет никаких побочных эффектов такого подхода.
Я хочу предоставить время для запроса в Superfeedr, проанализировать сообщение, убедиться, что оно не является дубликатом, а если нет, обновите значение в хранилище данных, которое представляет собой последнее сообщение, время. Вот что у меня есть:
synchronized(this) {
//check datastore entry to see if the message coming in is a duplicate
if(messageIsADuplicate(title)){
logger.log(Level.SEVERE, "DUPLICATE MESSAGE RECEIVED");
return;
}
//delete the entry in the datastore that represents the most recent message
if(!mostRecentMessageDeletedFromDatastore()){
logger.log(Level.SEVERE, "UNABLE TO DELETE MOST RECENT MSG");
return;
}
//add an entry to the datastore that represents the most recent message from superfeedr
if(!mostRecentMessageUpdatedInDatastore(title)){
logger.log(Level.SEVERE, "UNABLE TO UPDATE MOST RECENT MSG");
return;
}
}
Таким образом, если предположить, что я хочу один на время доступа к этому конкретному блоку кода, делает это представляется целесообразным?
они управляют распределенным сервисом, поэтому я предполагаю, что это может произойти. IIRC отправляют идентификатор вместе, и вы можете проверить, получили ли вы это? –