Ковыряюсь с rabbitmq.
Согласно заявленному в документации (и наблюдаемому), если сообщение отправляется в exchange/queue, у которого нету consumer'ов - оно отбрасывается (уходит в /dev/null).
Допустим, для штатной ситуации (аккуратно запустил всех consumer'ов, потом начал в них че-то писать) всё хорошо.
А что делать в нештатной ситуации.
Например, сообщения генерируются юзерами, кликающими на странички.
Веб-сервер поднимается автоматически при старте системы или при падении.
А consumer'ы, например, поднимаются нетривиально. Например, запускаются банально позже апача. Или запустились, но умерли и не поднимаются - мало ли. И пока они поднимутся - пройдет N времени и M сообщений будет отправлено в никуда.
С этим можно как-то бороться?
dead-letter не помогает, как я понимаю, потому что эта логика срабатывает только если сообщение не было обработано за N времени. Если же consumer'а тупо не было запущено - все сообщения протухнут мгновенно, без ожидания x-message-ttl.
Даже, фактически, если consumer'ы упадут по дороге (например, надо будет перезапустить), rabbitmq тут же начнет отбрасывать все входящие сообщения, не пытаясь и секунды дождаться consumer'ов.
Соответственно вопрос - как нужно себя вести с кроликом, что б не терять сообщения ни при каких условиях?
Вообще, не очень понимаю, зачем нужны disc-nodes и прочие пляски для хранения сообщений, если, например, при рестарте последней ноды, до появления первого consumer'а кролик сбросит все сообщения.
Или всё-таки я что-то глобально не понимаю?