RabbitMQ的一大特色是消息的可靠性,那么它是如何保证消息可靠性的呢?
消息持久化。可以将Queue,Exchange,Message都设置为可持久化的。为了保证RabbitMQ在退出,服务重启或者crash等异常情况下,也不会丢失消息。
RabbitMQ服务异常,重启时候怎么保证消息不丢失,持久化的实现?
1、Queue(消息队列)的持久化是通过durable=true来实现的。
Connection connection = connectionFactory.newConnection(); Channel channel = connection.createChannel(); //关键的是第二个参数设置为true,即durable=true. channel.queueDeclare("queue.persistent.name", true, false, false, null); /到这步仅仅是做到了消息队列的持久化,还没有做消息持久化。
2、Message(消息)的持久化 ,通过设置消息是持久化的标识。
//MessageProperties.PERSISTENT_TEXT_PLAIN channel.basicPublish("exchange.persistent", "persistent", MessageProperties.PERSISTENT_TEXT_PLAIN, "persistent_test_message".getBytes());
3、Exchange(交换机)的持久化 。
//即在声明的时候讲durable字段设置为true即可。 channel.exchangeDeclare(exchangeName, “direct/topic/header/fanout”, true);