Backup and Restore
This section provides recommendations on how to back up and restore the message queue when working with Oro applications. For more information on how to back up and restore RabbitMQ, see the related documentation on RabbitMQ website.
Backup
RabbitMQ backups are JSON representation of your broker’s metadata which includes users, vhosts, queues, exchanges, and bindings.
Backup Procedure
Stop all consumers
Export definitions
Back up messages
Start all consumers
Note
Maintenance mode is not required for creating RabbitMQ backup.
Exporting Definitions
Use the export
command provided by the RabbitMQ management plugin to back up definitions.
rabbitmqadmin export /path/to/your/backup/directory/definitions.backup
Backing Up Messages
Stop all consumers to back up messages. Messages’ data is stored in the node's data directory. Here, the nodes are collected in the msg_stores/vhosts
subdirectory which has other directories created per vhost.
The only way to back up messages is to copy ``msg_stores`` messages data directory.
# check your node directory
rabbitmqctl eval 'rabbit_mnesia:dir().'
# copy messages
cp -a /var/lib/rabbitmq/mnesia/your\@node/msg_stores/ /path/to/your/backup/directory/msg_stores
Restore
For messages to be restored, the broker should have all the definitions already in place. Message data for unknown vhosts and queues will not be loaded and can be deleted by the node.
Restore Procedure
Stop all consumers
Enable maintenance mode
Import definitions
Restore messages
Exclude messages
Stop maintenance mode
Start all consumers
Import Definitions
Use the import
command provided by the RabbitMQ management plugin to restore definitions.
rabbitmqadmin import /path/to/your/backup/directory/definitions.backup
Restore Messages
Copy msg_stores
messages data directory to the node's data directory.
# stop RabbitMQ node
rabbitmqctl stop_app
# copy messages
cp -a /path/to/your/backup/directory/msg_stores/* /var/lib/rabbitmq/mnesia/your\@node/msg_stores/
# start RabbitMQ node
rabbitmqctl start_app
Note
If your backup node name is different, you can change it as described in the documentation on RabbitMQ website.
Exclude Messages (emails notifications, 3rd party application updates, etc.)
To prevent reprocessing messages that contain email notifications, 3rd party application update, etc., filter them by routing key and divide a single queue into separate queues, as described in the Divide Single Queue to Separate Queues topic. After that, you can easily remove separate queues with excluded messages.
For more information, see the following external resources: