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