Как уже упоминалось, если вы просто помечаете сообщения как постоянные, они не обязательно сразу сохраняются, поэтому, если сервер неожиданно завершает работу, они могут никогда не оказаться на диске.
Так что вы будете делать, есливам действительно нужно, чтобы сообщение было на диске, даже если сервер выходит из строя?
Есть две вещи, которые вы можете сделать.Одним из них является завершение публикации в транзакции.Когда вы совершите транзакцию, сообщение будет на диске (если, конечно, оно еще не доставлено потребителю).Однако это добавляет синхронный вызов на сервер, поэтому он может замедлить работу.Если вы знаете, что собираетесь публиковать много сообщений, вы можете обернуть несколько публикаций в транзакцию, а затем, когда подтвердите, что все они находятся на диске.
Другое (более высокая производительность)Альтернативой является использование подтверждения публикации.Но они являются новыми на сервере 2.3.1, и я не думаю, что их поддерживают какие-либо клиенты Ruby.
Наконец, RabbitMQ в любом случае будет периодически сбрасывать постоянные сообщения на диск даже при отсутствии подтверждений, транзакций и контролируемыхостановов.Однако в 2.2.0 есть ошибка, которая означает, что это иногда не происходит долгое время, поэтому обновление до 2.3.1 может стоить.