Ответ 1
Когда абонент (потребитель) умирает, ваш список будет продолжать расти до тех пор, пока клиент не вернется. Ваш производитель может обрезать список (с каждой стороны), когда он достигнет определенного предела, но это то, что вам нужно будет обрабатывать на уровне приложения. Если вы включаете метку времени в каждое сообщение, ваш потребитель может затем действовать в соответствии с возрастом сообщения, предполагая, что у вас есть логика приложения, которую вы хотите применить в возрасте сообщения.
Я не уверен, как неверное сообщение войдет в систему, поскольку соединение с Redis обычно является TCP с его заверениями в целостности. Но если это произойдет, возможно, из-за ошибки в кодировке сообщения на уровне производителя, вы можете предоставить общий механизм для обработки ошибок, сохранив очередь на производителя, которая получила сообщения об исключениях для потребителей.
Политики повтора будут в значительной степени зависеть от потребностей вашего приложения. Если вам требуется 100% уверенность в том, что сообщение получено и обработано, вам следует рассмотреть возможность использования транзакций Redis (MULTI/EXEC) для переноса работы, выполняемой потребителем, чтобы вы могли убедиться, что клиент не удаляет сообщение, если только он завершил свою работу. Если вам требуется четкое подтверждение, вы можете использовать явное сообщение ACK в очереди, посвященной процессам (-ам) производителя.
Не зная больше о потребностях вашего приложения, трудно понять, как правильно выбирать. Как правило, если ваши сообщения требуют полной защиты ACID, вам также, вероятно, также придется использовать транзакции redis. Если ваши сообщения имеют смысл только тогда, когда они являются своевременными, тогда транзакции могут не понадобиться. Похоже, вы не можете терпеть упавшие сообщения, поэтому ваш подход к использованию списка хорош. Если вам нужно реализовать приоритетную очередь для своих сообщений, вы можете использовать отсортированный набор (Z-команды) для хранения ваших сообщений, используя их приоритет как значение оценки, а также потребитель опроса.