前一篇文中,我们说了rabbitMQ的confirm机制和事务,接下来我们讨论下消息的存储。
一. 消息持久化
消息写入磁盘是rabbitMQ保证可用性的基础。
1.1 Exchange持久化
durable参数设置为true
@Bean
public Exchange orderExchange() {
/**
* @param name
* @param durable
* @param autoDelete
* @param argument
*/
Map<String, Object> args = new HashMap<>();
DirectExchange exchange = new DirectExchange(EXCHANGE_NAME, true, false, args);
return exchange;
}
1.2 Queue持久化
durable参数设置为true
@Bean
public Queue queueDlx() {
/**
* @param name
* @param durable
* @param exclusive
* @param autoDelete
*
*/
Queue queue = new Queue(QUEUE_NAME, true, false, false);
return queue;
}
1.3 消息的持久化
将消息的投递模式,BasicProperties 中的 deliveryMode 属性)设置为 2
MessageProperties props = new MessageProperties();
props.setContentType(MessageProperties.CONTENT_TYPE_TEXT_PLAIN);
props.setContentEncoding("utf-8");
Message message = new Message("your message".getBytes(), props);
rabbitTemplate.send(EXCHANGE_NAME, ROUNTING_KEY, message, correlationData);
其中,MessageProperties源码如下:
public class MessageProperties {
public static final BasicProperties MINIMAL_BASIC = new BasicProperties((String)null, (String)null, (Map)null, (Integer)null, (Integer)null, (String)null, (String)null, (String)null, (String)null, (Date)null, (String)null, (String)null, (String)null, (String)null);
public static final BasicProperties MINIMAL_PERSISTENT_BASIC = new BasicProperties((String)null, (String)null, (Map)null, 2, (Integer)null, (String)null, (String)null, (String)null, (String)null, (Date)null, (String)null, (String)null, (String)null, (String)null);
public static final BasicProperties BASIC = new BasicProperties("application/octet-stream", (String)null, (Map)null, 1, 0, (String)null, (String)null, (String)null, (String)null, (Date)null, (String)null, (String)null, (String)null, (String)null);
public static final BasicProperties PERSISTENT_BASIC = new BasicProperties("application/octet-stream", (String)null, (Map)null, 2, 0, (String)null, (String)null, (String)null, (String)null, (Date)null, (String)null, (String)null, (String)null, (String)null);
public static final BasicProperties TEXT_PLAIN = new BasicProperties("text/plain", (String)null, (Map)null, 1, 0, (String)null, (String)null, (String)null, (String)null, (Date)null, (String)null, (String)null, (String)null, (String)null);
public static final BasicProperties PERSISTENT_TEXT_PLAIN = new BasicProperties("text/plain", (String)null, (Map)null, 2, 0, (String)null, (String)null, (String)null, (String)null, (Date)null, (String)null, (String)null, (String)null, (String)null);
public MessageProperties() {
}
}
下一篇我们将介绍消费端的操作。