Механизм сохранения RabbitMQ включает сохранение очереди, сохранение сообщения и сохранение обмена. Независимо от того, будет ли сообщение сохранено на диске или нет, его можно записать на диск.

Сохраненные сообщения записываются как на диск, так и в память (для ускорения чтения), в то время как несохраненные сообщения записываются на диск только при недостатке памяти (они будут потеряны после перезапуска RabbitMQ).

Сохранение очереди RabbitMQ

При объявлении очереди вы можете установить, должна ли очередь быть сохранена. Например, в Golang очередь объявляется следующим образом:

q, err := ch.QueueDeclare(
  "hello", // имя очереди
  true,   // нужно ли сохранить очередь
  false,
  false,
  false,
  nil,
)

Совет: Аналогично другим языкам программирования, сохранение очереди можно установить во время её объявления.

Сохранение обмена RabbitMQ

При объявлении обмена можно установить нужно ли его сохранить, используя свойства. Например, в Golang он объявляется следующим образом:

err = ch.ExchangeDeclare(
        "tizi365",   // имя обмена
        "fanout", // тип обмена
        true,     // нужно ли его сохранить
        false,    
        false,   
        false, 
        nil, 
    )

Совет: Аналогично другим языкам программирования, сохранение можно установить во время объявления обмена.

Сохранение сообщения RabbitMQ

При публикации сообщения можно установить, нужно ли сохранить сообщение через свойства сообщения.

Совет: Сохранение очереди не означает, что сообщение автоматически сохраняется.

Вот как в Golang публикуются сообщения:

err = ch.Publish(
			"tizi365",     // обмен
			"", // ключ маршрутизации
			false, 
			false,
			amqp.Publishing{
				DeliveryMode:2,  // режим доставки сообщения, 1 для непостоянного, 2 для постоянного
				ContentType: "text/plain",
				Body:        []byte(body),
			})