Nel mio controller WebApi ho il seguente codice (pseudo) che riceve le notifiche di aggiornamento da API in tempo reale di Instagram :
[HttpPost]
public void Post(InstagramUpdate instagramUpdate)
{
var subscriptionId = instagramUpdate.SubscriptionId;
var lastUpdate = GetLastUpdate(subscriptionId);
// To avoid breaking my Instagram request limit, do not fetch new images too often.
if (lastUpdate.AddSeconds(5) < DateTime.UtcNow)
{
// More than 5 seconds ago since last update for this subscription. Get new images
GetNewImagesFromInstagram(subscriptionId);
UpdateLastUpdate(subscriptionId, DateTime.UtcNow);
}
}
Questo non funzionerà molto bene se ricevo due notifiche di aggiornamento per la stessa sottoscrizione quasi contemporaneamente, poiché lastUpdate
non sarà stata aggiornata fino a dopo che la prima richiesta è stata elaborata. E anche se aggiorno lastUpdate
direttamente, c'è un "ritardo" a causa del round trip nel database.
Quale sarebbe il modo migliore per affrontare questo problema? Sto pensando di usare un qualche tipo di cache (che sarebbe più veloce del roundtrip del database), ma non sono sicuro di come. C'è qualche tipo di best practice per questo genere di cose? Suppongo che sia un problema comune: "ricevere notifiche, fare qualcosa se qualcosa non è stato fatto di recente ..."