RabbitMQ(四)事務消息,惰性隊列,優先隊列

文章目錄

  • 事務消息
    • 概念
    • 配置
  • 惰性隊列
    • 概念
    • 應用場景
  • 優先隊列
    • 概念
    • 配置

事務消息

僅在生產者端有效消費端無效

概念

在這里插入圖片描述

總結:

  • 在生產者端使用事務消息和消費端沒有關系
  • 在生產者端使用事務消息僅僅是控制事務內的消息是否發送
  • 提交事務就把事務內所有消息都發送到交換機
  • 回滾事務則事務內任何消息都不會被發送

配置

// 配置
import lombok.Data;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.rabbit.transaction.RabbitTransactionManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
@Data
public class RabbitConfig {@Beanpublic RabbitTransactionManager transactionManager(CachingConnectionFactory connectionFactory) {return new RabbitTransactionManager(connectionFactory);}@Beanpublic RabbitTemplate rabbitTemplate(CachingConnectionFactory connectionFactory) {RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);rabbitTemplate.setChannelTransacted(true);return rabbitTemplate;}
}
//測試@SpringBootTest
@Slf4j
public class RabbitMQTest {public static final String EXCHANGE_NAME = "exchange.tx.dragon";public static final String ROUTING_KEY = "routing.key.tx.dragon";@Autowiredprivate RabbitTemplate rabbitTemplate;@Test@Transactional@Rollback(value = true) // junit 默認回滾事務,所以想提交事務就設置為 falsepublic void testSendMessageInTx() {// 1、發送第一條消息rabbitTemplate.convertAndSend(EXCHANGE_NAME, ROUTING_KEY, "I am a dragon(tx msg ~~~01~~~)");// 2、拋出異常log.info("do bad:" + 10 / 0);// 3、發送第二條消息rabbitTemplate.convertAndSend(EXCHANGE_NAME, ROUTING_KEY, "I am a dragon(tx msg ~~~02~~~)");}}

惰性隊列

概念

創建隊列時,在Durability這里有兩個選項可以選擇

  • Durable:持久化隊列,消息會持久化到硬盤上
  • Transient:臨時隊列,不做持久化操作,broker重啟后消息會丟失
    在這里插入圖片描述
    在這里插入圖片描述
    在這里插入圖片描述
    https://www.rabbitmq.com/docs/lazy-queues

經典隊列中的消息會盡可能早地移動到磁盤。 只有當使用者請求這些消息時,它們才會加載到 RAM 中

在這里插入圖片描述
會從硬盤中讀取,只能作為權宜之計

應用場景

在這里插入圖片描述
在這里插入圖片描述

優先隊列

概念

默認情況:基于隊列先進先出的特性,通常來說,先入隊的先投遞

  • 設置優先級之后:優先級高的消息更大幾率先投遞
  • 關鍵參數:x-max-priority

RabbitMQ允許我們使用一個正整數給消息設定優先級

  • 消息的優先級數值取值范圍:1~255
  • RabbitMQ官網建議在1~5之間設置消息的優先級(優先級越高,占用CPU、
    內存等資源越多)

隊列在聲明時可以指定參數:x-max-priority

  • 默認值:0 此時消息即使設置優先級也無效
  • 指定一個正整數值:消息的優先級數值不能超過這個值

配置

配置exchange:exchange.test.priority
在這里插入圖片描述
配置隊列:queue.test.priority
x-max-priority
在這里插入圖片描述

// 生產者:發三個從1開始,優先級越大消費的時候越在前面消費
// 下面是發一條消息的示例public static final String EXCHANGE_PRIORITY = "exchange.test.priority";
public static final String ROUTING_KEY_PRIORITY = "routing.key.test.priority";
@Test
public void test06SendMessage() {rabbitTemplate.convertAndSend(EXCHANGE_PRIORITY, ROUTING_KEY_PRIORITY, "message test proirity 3", message -> {// 消息本身的優先級數值// 切記:不能超過 x-max-priority:	10message.getMessageProperties().setPriority(3);return message;});
}
// 消費者
@Component
@Slf4j
public class MyMessageListener {public static final String QUEUE_PRIORITY = "queue.test.priority";@RabbitListener(queues = {QUEUE_PRIORITY})public void processMessagePriority(String dataString, Message message, Channel channel) throws IOException {log.info("[priority]" + dataString);channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);}
}

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/20309.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/20309.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/20309.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python知識點13---面向對象的編程

提前說一點:如果你是專注于Python開發,那么本系列知識點只是帶你入個門再詳細的開發點就要去看其他資料了,而如果你和作者一樣只是操作其他技術的Python API那就足夠了。 Python是一個完全面向對象開發的語言,它的一切都以對象的…

Java面試——專業技能

優質博文:IT-BLOG-CN 一、簡單講下 Java 的跨平臺原理 由于各個操作系統(Windows,Linux等)支持的指令集不是完全一致的。就會讓我們程序在不同的操作系統上要執行不同的程序代碼。Java 開發了適用于不同操作系統及位數的 Java 虛擬…

【教程】自監督 對比學習,代碼,爽學一波

from: https://docs.lightly.ai/self-supervised-learning/examples/simclr.html

代碼隨想錄第22天|回溯part2 組合總和III電話號碼的字母組合

216.組合總和III 當組合的數量為k就判斷和&#xff0c;并且返回。 在枚舉的時候可以進行剪枝&#xff0c;如果總和已經超過了n&#xff0c;那么就沒必要繼續遞歸下去了 class Solution { public:vector<int> path;vector<vector<int>> res;void backTrackin…

微信小程序手機號碼授權登錄

文章目錄 一、微信小程序開發二、使用步驟1.前端代碼2.后臺配置3.后臺代碼 總結 一、微信小程序開發 目前個人的小程序無法使用手機號碼授權登錄&#xff0c;可以使用測試號進行開發 二、使用步驟 1.前端代碼 代碼如下&#xff08;示例&#xff09;&#xff1a; <butto…

Java版本家政上門系統源碼,自主研發、安全可控,支持任意二次開發

家政上門系統源碼&#xff0c;Java版本&#xff0c;自主研發、安全可控。支持任意二次開發、有豐富合作案例。多端管理&#xff1a;管理端、用戶端、服務端。 技術參數&#xff1a; 技術架構&#xff1a;springboot、mysql 、Thymeleaf 開發語言&#xff1a;java1.8、vue 開…

python 象棋小游戲代碼

以下是一個簡單的Python象棋小游戲的代碼示例。這個示例使用了pygame庫來創建圖形用戶界面和處理用戶輸入。 首先&#xff0c;確保安裝了pygame庫&#xff1a; pip install pygame 然后&#xff0c;可以運行以下代碼&#xff1a; import pygame import sys # 初始化pygam…

軟件開發步驟詳解

一、引言 隨著信息技術的迅猛發展&#xff0c;軟件已成為現代社會不可或缺的一部分。無論是企業運營、個人生活還是科學研究&#xff0c;都離不開各種軟件的支持。因此&#xff0c;掌握軟件開發的步驟和技巧對于IT從業者來說至關重要。本文旨在詳細介紹軟件開發的整個流程&…

Python知識點7---字典與集合

提前說一點&#xff1a;如果你是專注于Python開發&#xff0c;那么本系列知識點只是帶你入個門再詳細的開發點就要去看其他資料了&#xff0c;而如果你和作者一樣只是操作其他技術的Python API那就足夠了。 Python的字典與集合是沒有下標一說的&#xff0c;字典說的其實就是ma…

使用機器學習做醫學圖像分類的開源項目集錦

項目名稱倉庫描述主要特點適配建議U-Net用于生物醫學圖像分割zhixuhao/unetKeras中的U-Net實現&#xff0c;用于2D圖像分割。 - 基本的U-Net架構 - 生物醫學圖像訓練示例 - 簡單的數據加載器 - 修改數據加載器以處理特定MRI格式 - 調整訓練管道以適應STIR序列和標簽 使用PyTor…

更改Web網站設計——css和css框架

雖然使用HTML可以定義文章的結構&#xff0c;但是其中不包含設計相關的信息。此時CSS就派上用場&#xff0c;可以用它對HTML文章指定設計樣式。由于可以決定Web網頁的外觀風格&#xff0c;因此&#xff0c;它有時也被稱為格式表。 如果使用CSS設置背景色&#xff0c;文…

計算機網絡期末復習(1)計算機網絡在信息時代對的作用 計算機網絡的定義和分類 三種交換方法

計算機網絡在信息時代扮演著至關重要的角色&#xff0c;它極大地改變了我們生活、工作和學習的方式。 計算機網絡在信息時代的作用 信息共享與傳播&#xff1a;計算機網絡使全球范圍內的信息快速共享成為可能&#xff0c;無論是新聞、學術研究還是娛樂內容&#xff0c;都可以…

初識 JavaScript

目錄 1. 什么是 JavaScript2. JS 引入方式2.1 內部引入方式2.2 外部引入方式 3. JS 中的注釋4. JS 中的結束符5. 輸入和輸出5.1 輸出5.2 輸入 6. 變量與常量6.1 變量的聲明6.2 變量的賦值6.3 常量 7. JS 中的數據類型8. JS 中的類型轉換8.1 隱式轉換8.2 顯式轉換 正文開始 1. …

Java 多線程相關面試題

1. ConcurrentHashMap的讀是否要加鎖&#xff0c;為什么? 讀操作沒有加鎖&#xff0c;目的是為了進一步降低鎖沖突的概率&#xff0c;為了保證讀到剛修改的數據&#xff0c;搭配了volatile 關鍵字&#xff1b; 2. 介紹下 ConcurrentHashMap 的鎖分段技術? 這個是 Java1.7 …

TP8 定時任務yzh52521/http-crontab 教程

官方文檔&#xff1a; https://www.thinkphp.cn/ext/36 源碼倉&#xff1a; http-crontab: 接口化秒級定時任務管理 GitHub - yuanzhihai/http-crontab: 接口化秒級定時任務管理 參考案例&#xff1a; http-crontab:Workerman ThinkPHP6 實現后臺可視化定時任務管理 htt…

深入解析Java注解機制:元注解、自定義處理器及其在框架中的妙用

1.注解簡介與作用 1.1 什么是注解&#xff08;Annotation&#xff09; 在Java中&#xff0c;注解是一種應用于類、方法、變量、參數和Java包等元素的標記。這些標記可以在編譯時、加載時甚至運行時被讀取&#xff0c;并執行相應的處理。通過使用注解&#xff0c;開發人員可以…

C++中的List

摘要 C 標準庫中的 std::list 是一種雙向鏈表容器&#xff0c;它允許在常數時間內進行插入和刪除操作&#xff0c;每個元素包含一個指向前一個和后一個元素的指針。這給我們開發提供了高效的插入和刪除操作。 引入頭文件 要使用 std::list&#xff0c;需要包含頭文件 <li…

鈑金件設計規范

(一&#xff09; 鈑金 1、鈑金的概念 鈑金&#xff08;sheet metal&#xff09;是針對金屬薄板&#xff08;厚度通常在6mm以下&#xff09;的 一種綜合冷加工工藝&#xff0c;包括沖裁、折彎、拉深、成形、鍛壓、鉚合等&#xff0c; 其顯著的特征是同一零件厚度一致。 2、鈑…

C語言屬于什么是編程語言:探索C語言的本質與特性

C語言屬于什么是編程語言&#xff1a;探索C語言的本質與特性 在編程領域&#xff0c;C語言無疑是一種重要的、廣泛應用的編程語言。但是&#xff0c;C語言究竟屬于哪一類編程語言&#xff1f;它又有哪些獨特的特性和價值&#xff1f;本文將從四個方面、五個方面、六個方面和七…

精通推薦算法8:Embedding表征學習 -- 總體架構

1 Embedding表征學習的總體架構 目前&#xff0c;推薦算法精排模型大多基于Embedding MLP范式&#xff0c;模型底層是Embedding層&#xff0c;作用是將高維稀疏的輸入特征轉換為低維稠密的特征向量&#xff0c;并實現一定的模糊查找能力。模型上層是MLP層&#xff0c;作用是對…