亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Springboot?2.x?RabbitTemplate默認消息持久化的原因解析

 更新時間:2022年03月01日 10:17:58   作者:專注寫bug  
這篇文章主要介紹了Springboot?2.x?RabbitTemplate默認消息持久化的原因解析,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

前言

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

//消息持久化測試
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;//優(yōu)先級
        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;
...

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

springboot測試

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

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

SpringBoot整合RabbitMQ實現(xiàn)消息確認機制

測試現(xiàn)象

首先將消息消費者代碼進行注釋。執(zhí)行接口,創(chuàng)建消息存入隊列中。

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

源碼分析

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

從源碼執(zhí)行邏輯可以看出:

在這里插入圖片描述

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

在這里插入圖片描述

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

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

在這里插入圖片描述

判斷當前的數(shù)據(jù)類型,是否是Message類型。

如果是Message類型,則直接將其強轉(zhuǎn)Message。
如果不是,則執(zhí)行了新的方法,將其轉(zhuǎn)換了一次。

轉(zhuǎn)換過程如下所示:

在這里插入圖片描述

在這里插入圖片描述

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

回到最初的convertAndSend執(zhí)行方法。

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

該參數(shù)由類創(chuàng)建加載時生成,其數(shù)據(jù)如下所示:

在這里插入圖片描述

在這里插入圖片描述

聯(lián)想

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

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

到此這篇關(guān)于Springboot 2.x RabbitTemplate默認消息持久化的原因解析的文章就介紹到這了,更多相關(guān)Springboot 2.x RabbitTemplate默認消息持久化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關(guān)文章

  • JAVA spark創(chuàng)建DataFrame的方法

    JAVA spark創(chuàng)建DataFrame的方法

    這篇文章主要介紹了JAVA spark創(chuàng)建DataFrame的方法,幫助大家更好的理解和學習spark,感興趣的朋友可以了解下
    2020-08-08
  • java中Spring Security的實例詳解

    java中Spring Security的實例詳解

    這篇文章主要介紹了java中Spring Security的實例詳解的相關(guān)資料,spring security是一個多方面的安全認證框架,提供了基于JavaEE規(guī)范的完整的安全認證解決方案,需要的朋友可以參考下
    2017-09-09
  • Maven及Springboot配置JDK版本,編碼,源碼打包等方式

    Maven及Springboot配置JDK版本,編碼,源碼打包等方式

    這篇文章主要介紹了Maven及Springboot配置JDK版本,編碼,源碼打包等方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 關(guān)于Mybatis使用collection分頁問題

    關(guān)于Mybatis使用collection分頁問題

    項目中mybatis分頁的場景是非常高頻的,當使用ResultMap并配置collection做分頁的時候,我們可能會遇到獲取當前頁的數(shù)據(jù)少于每頁大小的數(shù)據(jù)問題。接下來通過本文給大家介紹Mybatis使用collection分頁問題,感興趣的朋友一起看看吧
    2021-11-11
  • 關(guān)于java中多個JDK和切換版本介紹

    關(guān)于java中多個JDK和切換版本介紹

    大家好,本篇文章主要講的是關(guān)于java中多個JDK和切換版本介紹,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • Mybatis如何配置連接池

    Mybatis如何配置連接池

    本文通過實例代碼給大家詳細介紹了mybatis配置連接池的方法,非常不錯,具有參考借鑒價值,感興趣的朋友參考下吧
    2016-12-12
  • java實現(xiàn)分布式項目搭建的方法

    java實現(xiàn)分布式項目搭建的方法

    這篇文章主要介紹了java實現(xiàn)分布式項目搭建的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • java小數(shù)位的例子

    java小數(shù)位的例子

    在java中要保留數(shù)字小數(shù)位我們有常用的四種方法,分別為:四舍五入,DecimalFormat,format,String .format與struts標簽操作實現(xiàn),下面給出例子
    2013-11-11
  • swagger添加權(quán)限驗證保證API(接口)安全性(兩種方法)

    swagger添加權(quán)限驗證保證API(接口)安全性(兩種方法)

    這篇文章主要介紹了swagger添加權(quán)限驗證保證API(接口)安全性(兩種方法),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • Java中static和static?final的區(qū)別詳解

    Java中static和static?final的區(qū)別詳解

    這篇文章主要介紹了Java中static和static?final的區(qū)別詳解,開發(fā)時我們經(jīng)常用到static以及static?final來修飾我們的字段變量,那么他們到底有什么區(qū)別呢?其實他們的區(qū)別可以用使用字節(jié)碼文件來解析,需要的朋友可以參考下
    2023-10-10

最新評論