Redis
 sql >> Base de données >  >> NoSQL >> Redis

Redis Pub/Sub avec fiabilité

Lorsqu'un abonné (consommateur) décède, votre liste continuera de croître jusqu'au retour du client. Votre producteur peut réduire la liste (de chaque côté) une fois qu'elle atteint une limite spécifique, mais c'est quelque chose que vous devez gérer au niveau de l'application. Si vous incluez un horodatage dans chaque message, votre consommateur peut alors agir sur l'âge d'un message, en supposant que vous ayez une logique d'application que vous souhaitez appliquer à l'âge du message.

Je ne sais pas comment un message mal formé entrerait dans le système, car la connexion à Redis est généralement TCP avec ses garanties d'intégrité. Mais si cela se produit, peut-être en raison d'un bogue dans l'encodage des messages au niveau de la couche producteur, vous pouvez fournir un mécanisme général de gestion des erreurs en conservant une file d'attente par producteur qui reçoit les messages d'exception du consommateur.

Les stratégies de nouvelle tentative dépendront grandement des besoins de votre application. Si vous avez besoin d'une assurance à 100 % qu'un message a été reçu et traité, vous devriez envisager d'utiliser les transactions Redis (MULTI/EXEC) pour encapsuler le travail effectué par un consommateur, afin de vous assurer qu'un client ne supprime pas un message à moins que il a terminé son travail. Si vous avez besoin d'un accusé de réception explicite, vous pouvez utiliser un message ACK explicite sur une file d'attente dédiée au(x) processus producteur(s).

Sans en savoir plus sur les besoins de votre application, il est difficile de savoir comment choisir judicieusement. En règle générale, si vos messages nécessitent une protection ACID complète, vous devrez probablement également utiliser des transactions Redis. Si vos messages n'ont de sens que lorsqu'ils sont opportuns, les transactions peuvent ne pas être nécessaires. Il semble que vous ne puissiez pas tolérer les messages abandonnés, donc votre approche d'utilisation d'une liste est bonne. Si vous avez besoin d'implémenter une file d'attente prioritaire pour vos messages, vous pouvez utiliser l'ensemble trié (les commandes Z) pour stocker vos messages, en utilisant leur priorité comme valeur de score, ainsi qu'un consommateur d'interrogation.