91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Springboot?2.x?RabbitTemplate默認消息持久化的示例分析

發布時間:2022-03-01 13:37:50 來源:億速云 閱讀:182 作者:小新 欄目:開發技術

這篇文章主要為大家展示了“Springboot 2.x RabbitTemplate默認消息持久化的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Springboot 2.x RabbitTemplate默認消息持久化的示例分析”這篇文章吧。

前言

之前在Java直接測試mq消息持久化時,采取如下的配置實現消息的持久化:

//消息持久化測試
Builder builder = new Builder();
builder.deliveryMode(2);
BasicProperties properties = builder.build();
channel.basicPublish("", queue_name, properties, string.getBytes());

其中針對BasicProperties中的源碼信息為:

public static class BasicProperties extends
com.rabbitmq.client.impl.AMQBasicProperties {
        private String contentType;//消息類型如:text/plain
        private String contentEncoding;//編碼
        private Map<String,Object> headers;
        private Integer deliveryMode;//1:nonpersistent 不持久 2:persistent 持久
        private Integer priority;//優先級
        private String correlationId;
        private String replyTo;//反饋隊列
        private String expiration;//expiration到期時間
        private String messageId;
        private Date timestamp;
        private String type;
        private String userId;
        private String appId;
        private String clusterId;
...

參照博客:消息應答(autoAck)、隊列持久化(durable)以及消息持久化

springboot測試

上面的配置是Java直接測試時,所需要編寫的代碼邏輯,如果采取springboot配置,則會出現默認消息持久化的現象。

至于測試案例,可以參考下列博客:

SpringBoot整合RabbitMQ實現消息確認機制

測試現象

首先將消息消費者代碼進行注釋。執行接口,創建消息存入隊列中。

Springboot?2.x?RabbitTemplate默認消息持久化的示例分析

Springboot?2.x?RabbitTemplate默認消息持久化的示例分析

Springboot?2.x?RabbitTemplate默認消息持久化的示例分析

源碼分析

要想知道為什么消息會自動持久化,則需要關注rabbitTemplate.convertAndSend(exchange,routingKey,msg)這個方法。

從源碼執行邏輯可以看出:

Springboot?2.x?RabbitTemplate默認消息持久化的示例分析

rabbitTemplate提供的消息加載至隊列中,采取的數據類型為Object,但在其源碼邏輯中,又將Object消息類型,進行了this.convertMessageIfNecessary(object)處理,將object對象類型轉化為Message對象類型。

Springboot?2.x?RabbitTemplate默認消息持久化的示例分析

從此處可以看出,rabbitTemplate為了讓開發者處理數據更簡單,將消息持久化等操作默認進行了配置

現在,一起來看convertMessageIfNecessary(object)做了什么?

Springboot?2.x?RabbitTemplate默認消息持久化的示例分析

判斷當前的數據類型,是否是Message類型

如果是Message類型,則直接將其強轉Message
如果不是,則執行了新的方法,將其轉換了一次。

轉換過程如下所示:

Springboot?2.x?RabbitTemplate默認消息持久化的示例分析

Springboot?2.x?RabbitTemplate默認消息持久化的示例分析

后面的就不深入了。那持久化的默認配置在哪進行的?

回到最初的convertAndSend執行方法。

Springboot?2.x?RabbitTemplate默認消息持久化的示例分析

Springboot?2.x?RabbitTemplate默認消息持久化的示例分析

Springboot?2.x?RabbitTemplate默認消息持久化的示例分析

該參數由類創建加載時生成,其數據如下所示:

Springboot?2.x?RabbitTemplate默認消息持久化的示例分析

Springboot?2.x?RabbitTemplate默認消息持久化的示例分析

聯想

也就是說,在convertMessageIfNecessary時,會判斷傳遞的參數類型是否為Message類型,如果不是則需要再包裝一次。

如果不想設定消息持久化,傳遞的數據類型為Message類型即可!

以上是“Springboot 2.x RabbitTemplate默認消息持久化的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

基隆市| 贵阳市| 庆云县| 阳高县| 柘荣县| 卢龙县| 微博| 连平县| 五大连池市| 彰武县| 探索| 尉氏县| 柏乡县| 平果县| 青神县| 阿巴嘎旗| 海丰县| 沙湾县| 句容市| 广东省| 洱源县| 武隆县| 酒泉市| 武定县| 观塘区| 临泽县| 建水县| 鹰潭市| 临猗县| 会宁县| 任丘市| 通江县| 太湖县| 天祝| 共和县| 西乡县| 咸丰县| 湟中县| 楚雄市| 石城县| 巫溪县|