rabbitMQ是如何保障消息可靠性的(二)

前一篇文中,我们说了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() {
    }
}

下一篇我们将介绍消费端的操作。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

相关阅读更多精彩内容

友情链接更多精彩内容