sql >> Base de Datos >  >> NoSQL >> Redis

Redis Pub/Sub con confiabilidad

Cuando un suscriptor (consumidor) muere, su lista seguirá creciendo hasta que el cliente regrese. Su productor podría recortar la lista (de cualquier lado) una vez que alcance un límite específico, pero eso es algo que deberá manejar a nivel de la aplicación. Si incluye una marca de tiempo en cada mensaje, su consumidor puede actuar sobre la antigüedad de un mensaje, suponiendo que tiene una lógica de aplicación que desea aplicar a la antigüedad del mensaje.

No estoy seguro de cómo un mensaje con formato incorrecto entraría en el sistema, ya que la conexión a Redis suele ser TCP con sus garantías de integridad. Pero si esto sucede, quizás debido a un error en la codificación de mensajes en la capa del productor, podría proporcionar un mecanismo general para manejar los errores al mantener una cola por productor que recibió los mensajes de excepción del consumidor.

Las políticas de reintento dependerán en gran medida de las necesidades de su aplicación. Si necesita una seguridad del 100 % de que se recibió y procesó un mensaje, entonces debería considerar el uso de transacciones de Redis (MULTI/EXEC) para envolver el trabajo realizado por un consumidor, de modo que pueda asegurarse de que un cliente no elimine un mensaje a menos que ha completado su trabajo. Si necesita un reconocimiento explícito, puede usar un mensaje ACK explícito en una cola dedicada a los procesos productores.

Sin saber más sobre las necesidades de su aplicación, es difícil saber cómo elegir sabiamente. En general, si sus mensajes requieren una protección ACID completa, entonces probablemente también necesite usar transacciones redis. Si sus mensajes solo son significativos cuando son oportunos, es posible que no se necesiten transacciones. Parece que no puede tolerar los mensajes perdidos, por lo que su enfoque de usar una lista es bueno. Si necesita implementar una cola de prioridad para sus mensajes, puede usar el conjunto ordenado (los comandos Z) para almacenar sus mensajes, usando su prioridad como valor de puntuación, junto con un consumidor de sondeo.