您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“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)以及消息持久化
上面的配置是Java直接測試時,所需要編寫的代碼邏輯,如果采取springboot配置,則會出現默認消息持久化
的現象。
至于測試案例,可以參考下列博客:
SpringBoot整合RabbitMQ實現消息確認機制
首先將消息消費者
代碼進行注釋
。執行接口,創建消息存入隊列中。
要想知道為什么消息會自動持久化
,則需要關注rabbitTemplate.convertAndSend(exchange,routingKey,msg)
這個方法。
從源碼執行邏輯可以看出:
rabbitTemplate
提供的消息加載至隊列中,采取的數據類型為Object
,但在其源碼邏輯中,又將Object
消息類型,進行了this.convertMessageIfNecessary(object)
處理,將object
對象類型轉化為Message
對象類型。
從此處可以看出,rabbitTemplate
為了讓開發者處理數據更簡單,將消息持久化
等操作默認進行了配置
。
現在,一起來看convertMessageIfNecessary(object)
做了什么?
判斷當前的數據類型,是否是Message類型
。
如果是
Message
類型,則直接將其強轉Message
。
如果不是,則執行了新的方法,將其轉換了一次。
轉換過程如下所示:
后面的就不深入了。那持久化的默認配置在哪進行的?
回到最初的convertAndSend
執行方法。
該參數由類創建加載時生成,其數據如下所示:
也就是說,在convertMessageIfNecessary
時,會判斷傳遞的參數類型是否為Message
類型,如果不是則需要再包裝一次。
如果
不想設定消息持久化
,傳遞的數據類型為Message
類型即可!
以上是“Springboot 2.x RabbitTemplate默認消息持久化的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。