RabbitMQ 如何保證消息不丟失

  1. 開啟消息確認機制:

    在發布消息時,可以設置deliveryMode為2(持久化),以確保消息不會因為RabbitMQ的崩潰而丟失。

  2. 使隊列持久化:

    通過設置durabletrue,可以確保隊列在RabbitMQ重啟后依然存在。

  3. 使消費者確認機制:

    啟用手動確認模式,并在消費完消息后手動確認。

  4. 以下是使用Java和Spring AMQP的示例代碼:

@Bean
public Queue myQueue() {return QueueBuilder.durable("myQueue").build();
}@Bean
public DirectExchange myExchange() {return new DirectExchange("myExchange");
}@Bean
public Binding myBinding() {return BindingBuilder.bind(myQueue()).to(myExchange()).with("myRoutingKey");
}@Bean
public SimpleMessageListenerContainer messageListenerContainer(ConnectionFactory connectionFactory, MessageListenerAdapter listenerAdapter) {SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();container.setConnectionFactory(connectionFactory);container.setQueueNames("myQueue");container.setMessageListener(listenerAdapter);container.setAcknowledgeMode(AcknowledgeMode.MANUAL); // 手動確認模式return container;
}@Bean
public MessageListenerAdapter listenerAdapter(MyConsumer myConsumer) {return new MessageListenerAdapter(myConsumer, "handleMessage");
}public class MyConsumer {public void handleMessage(Message message) {// 處理消息// ...// 確認消息channel.basicAck(envelope.getDeliveryTag(), false);}
}

在發送消息時:

rabbitTemplate.convertAndSend("myExchange", "myRoutingKey", message, message -> {message.getMessageProperties().setDeliveryMode(MessageDeliveryMode.PERSISTENT); // 設置消息持久化return message;
});

確保你的消費者在處理完消息后調用basicAck來確認消息,這樣即使消費者崩潰,未確認的消息也會被重新傳遞給另一個消費者。如果你希望在消費者異常時自動重新將消息放回隊列,可以在handleMessage方法中捕獲異常,并在異常處理邏輯中調用basicNackbasicReject方法,并設置重回隊列的參數。

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

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

相關文章

Python 實戰:打造智能進銷存系統

想象一下,在繁忙的商店里,每天都有數以百計的商品進進出出,庫存在不斷變化,銷售數據涌入,而你卻能輕松應對一切。是的,Python 可以幫你實現這一切。本文將教你如何使用 Python 構建一個智能的進銷存系統&am…

學習記錄-5.30

學習記錄-5.30 同步在我的博客可以來看看 http://www.zhihuigou.top/ ### Golang為什么比別的語言跟擅長并發: 首先是因為Goroutine,算是go的一個最大的特色 是輕量級的線程,創建一個goroutine的開銷非常小,大約幾KB,且調度開銷很低 并且goroutine的調度,并不…

React組件通信——兄弟組件

兄弟組件通信 方法一:狀態提升 子組件先將數據傳遞到父組件,父組件再把數據傳到另一個子組件中。 import { useState } from "react"; // 定義A組件,向B組件發送數據 function A({ onGetMsg }) {const name "this is A na…

fyne apptab布局

fyne apptab布局 AppTabs 容器允許用戶在不同的內容面板之間切換。標簽要么只是文本,要么是文本和一個圖標。建議不要混合一些有圖標的標簽和一些沒有圖標的標簽。 package mainimport ("fyne.io/fyne/v2/app""fyne.io/fyne/v2/container"//&…

PolarDB分布式架構學習筆記

PolarDB分布式是什么? 業務場景有哪些? 分布式焦點問題? 技術架構 CN DN介紹 CDC組件介紹 Columnar組件介紹 視頻學習:PolarDB 實操課 第一講:PolarDB分布式版架構介紹_嗶哩嗶哩_bilibili

都在說的跨網文件共享系統是什么?企業該怎么甄選?

跨網文件共享系統成為越來越受關注的產品焦點,那么跨網文件共享系統是什么呢?跨網文件共享是指在不同網絡之間共享文件的過程,使得不同網絡中的用戶可以訪問和使用共享的文件。 原則上而言,不同網絡間的文件是無法共享的&#xff…

在SpringBoot中使用redis中的zset實現延遲任務

為什么使用zset實現延遲任務 ZSET(有序集合)適合實現延遲任務的原因主要有以下幾點: 排序特性:ZSET根據分數(score)自動排序,這使得我們可以將任務的執行時間作為分數,從而能夠輕松…

OAK相機如何將 YOLOv9 模型轉換成 blob 格式?

編輯:OAK中國 首發:oakchina.cn 喜歡的話,請多多👍??? 內容可能會不定期更新,官網內容都是最新的,請查看首發地址鏈接。 Hello,大家好,這里是OAK中國,我是Ashely。 專…

最新消息:騰訊大模型App“騰訊元寶“上線了

🧙?♂? 諸位好,吾乃斜杠君,編程界之翹楚,代碼之大師。算法如流水,邏輯如棋局。 📜 吾之筆記,內含諸般技術之秘訣。吾欲以此筆記,傳授編程之道,助汝解技術難題。 &#…

Python代碼:二十八、密碼游戲

1、題目 牛牛和牛妹一起玩密碼游戲,牛牛作為發送方會發送一個4位數的整數給牛妹,牛妹接收后將對密碼進行破解。 破解方案如下:每位數字都要加上3再除以9的余數代替該位數字,然后將第1位和第3位數字交換,第2位和第4位…

2024年藝術鑒賞與科學教育國際會議(ICAASE 2024)

2024年藝術鑒賞與科學教育國際會議 2024 International Conference on Art Appreciation and Science Education 【1】會議簡介 2024年藝術鑒賞與科學教育國際會議是一場集藝術、科學和教育于一體的國際性學術盛會。本次會議旨在推動藝術鑒賞與科學教育領域的深入交流與合作&am…

C語言(字符函數和字符串函數)1

Hi~!這里是奮斗的小羊,很榮幸各位能閱讀我的文章,誠請評論指點,關注收藏,歡迎歡迎~~ 💥個人主頁:小羊在奮斗 💥所屬專欄:C語言 本系列文章為個人學習筆記&#x…

python API自動化(接口測試基礎與原理)

1.接口測試概念及應用 什么是接口 接口是前后端溝通的橋梁,是數據傳輸的通道,包括外部接口、內部接口,內部接口又包括:上層服務與下層服務接口,同級接口 外部接口:比如你要從 別的網站 或 服務器 上獲取 資源或信息 &a…

SpringMVC框架學習筆記(四):模型數據 以及 視圖和視圖解析器

1 模型數據處理-數據放入 request 說明&#xff1a;開發中, 控制器/處理器中獲取的數據如何放入 request 域&#xff0c;然后在前端(VUE/JSP/...)取出顯 示 1.1 方式 1: 通過 HttpServletRequest 放入 request 域 &#xff08;1&#xff09;前端發送請求 <h1>添加主人…

使用dockerfile快速構建一個帶ssh的docker鏡像

不多說先給代碼 FROM ubuntu:22.04 # 基礎鏡像 可替換為其他鏡像 USER root RUN echo root:root |chpasswd RUN apt-get update -y \&& apt-get install -y git wget curl RUN apt-get install -y openssh-server vim && apt clean \&& rm -rf /tmp/…

在SpringBoot項目中實現切面執行鏈功能

1.定義切面執行鏈頂級接口 AspectHandler /*** 切面執行鏈**/ public interface AspectHandler {/*** 設置排除項* param excludes*/default void setExcludes(List<String> excludes) {}/*** 獲取排除項* return*/default List<String> getExcludes() {return ne…

事務與并發控制

事務&#xff08;Transaction0&#xff09;&#xff1a;要么全做&#xff0c;要么全不做&#xff1b; 事務ACID&#xff1a;原子性Atomicity&#xff1b;一致性Consistency&#xff1b;隔離性Isolation&#xff1b;持久性Durability&#xff1b; 并發操作問題&#xff1a; 1.…

基于RNN和Transformer的詞級語言建模 代碼分析 _generate_square_subsequent_mask

基于RNN和Transformer的詞級語言建模 代碼分析 _generate_square_subsequent_mask flyfish Word-level Language Modeling using RNN and Transformer word_language_model PyTorch 提供的 word_language_model 示例展示了如何使用循環神經網絡RNN(GRU或LSTM)和 Transforme…

汽車IVI中控開發入門及進階(二十二):video decoder視頻解碼芯片

前言: 視頻解碼器在許多汽車、專業和消費視頻應用中仍有需求。Analog Devices是模擬視頻產品領域的行業領導者,提供一系列視頻解碼器,可將標準(SD,standard definition)和高清(HD,High definition)分辨率的模擬視頻高質量轉換為MIPI或TTL格式的數字視頻數據。典型的應…

【AI大模型】如何讓大模型變得更聰明?基于時代背景的思考

【AI大模型】如何讓大模型變得更聰明 前言 在以前&#xff0c;AI和大模型實際上界限較為清晰。但是隨著人工智能技術的不斷發展&#xff0c;基于大規模預訓練模型的應用在基于AI人工智能的技術支持和幫助上&#xff0c;多個領域展現出了前所未有的能力。無論是自然語言處理、…