Java學習-----消息隊列

????????消息隊列是分布式系統中重要的組件之一。使用消息隊列主要是為了通過異步處理提高系統性能和削峰、降低系統耦合性。

????????使用消息隊列主要有三點好處:
(1)通過異步處理提高系統性能(減少響應所需時間):用戶提交請求后,服務器將其發送到消息隊列后直接就給出響應,相較于傳統的服務器收到請求后,對數據庫進行處理,得到結果再響應這個流程,消息隊列通過處理和響應的分離,大大提高了系統性能。
(2)削峰/限流:先將短時間高并發產生的事務消息存儲在消息隊列中,然后后端服務再慢慢根據自己的能力去消費這些消息,這樣就避免直接把后端服務打垮掉。
(3)降低系統耦合性:一個模塊將信息放入消息隊列中,其他模塊再來消息隊列中取走需要的信息,可以減少模塊之間的依賴,大大降低耦合性。

? ? ? ? 消息隊列主要采用兩種方式:發布-訂閱模式和點對點模式。如果把消息的提供者視為生產者,使用消息的部分視為消費者,那么這兩個模式中,前者是一個生產者把生產的消息發布到消息隊列中,多個消費者訂閱消息;后者是一個生產者專門給一個消費者生產消息。

? ? ? ? 雖然消息隊列好處多多,但也有一些顯而易見的缺點:

????????系統可用性降低: 系統可用性在某種程度上降低,引入后,程序員需要額外考慮消息在傳輸中丟失的可能
系統復雜性提高: 加入消息隊列后之后,程序員需要保證消息沒有被重復消費、處理消息丟失的情況、保證消息傳遞的順序性等等問題
一致性問題: 消息隊列可以實現異步,消息隊列帶來的異步確實可以提高系統響應速度。但是這也會導致出現消息隊列會出現內容不一致的情況。

? ? ? ? 常見的消息隊列主要有:ActiveMQ、RabbitMQ、RocketMQ、Kafka,其差異如下:

對比方向概要
吞吐量萬級的 ActiveMQ 和 RabbitMQ 的吞吐量(ActiveMQ 的性能最差)要比 十萬級甚至是百萬級的 RocketMQ 和 Kafka 低一個數量級。
可用性都可以實現高可用。ActiveMQ 和 RabbitMQ 都是基于主從架構實現高可用性。RocketMQ 基于分布式架構。 kafka 也是分布式的,一個數據多個副本,少數機器宕機,不會丟失數據,不會導致不可用
時效性RabbitMQ 基于erlang開發,所以并發能力很強,性能極其好,延時很低,達到微秒級。其他三個都是 ms 級。
功能支持除了 Kafka,其他三個功能都較為完備。 Kafka 功能較為簡單,主要支持簡單的MQ功能,在大數據領域的實時計算以及日志采集被大規模使用,是事實上的標準
消息丟失ActiveMQ 和 RabbitMQ 丟失的可能性非常低, RocketMQ 和 Kafka 理論上不會丟失。

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

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

相關文章

玩轉Docker | 使用Docker部署TeamMapper思維導圖應用程序

玩轉Docker | 使用Docker部署TeamMapper思維導圖應用程序 前言 一、TeamMapper介紹 TeamMapper簡介 TeamMapper功能 二、系統要求 環境要求 環境檢查 Docker版本檢查 檢查操作系統版本 三、部署TeamMapper服務 下載TeamMapper鏡像 編輯部署文件 創建容器 檢查容器狀態 檢查服務…

深入解析Linux進程創建與fork機制

目錄 一、fork函數初識 二、fork函數返回值 思考: 1. fork函數為何給子進程返回0,而給父進程返回子進程的PID? 2. 關于fork函數為何有兩個返回值這個問題 三、寫時復制機制 寫時拷貝(Copy-On-Write)機制解析 1.…

【軟件開發】主流 AI 編碼插件

主流 AI 編碼插件1. GitHub Copilot 支持平臺:VS Code、Neovim、JetBrains 系列、Visual Studio 優點 深度語料庫:基于 OpenAI 的大規模模型訓練,能夠生成高質量、上下文相關的代碼補全。多語言支持:對 Python、JavaScript、TypeS…

實訓十一——網絡通信原理

補充如何解決IPv4地址不足的問題?使用專用的IPv4地址范圍(如 10.0.0.0/8、172.16.0.0/12、192.168.0.0/16)并通過NAT轉換與外部網絡通信,能有效節約公網IPv4地址。根據RFC 1918的定義,以下是保留的私有IPv4地址范圍&am…

Spring Cloud LoadBalancer 詳解

在分布式系統快速發展的當下,服務間的調用日益頻繁且復雜。如何合理分配請求流量,避免單個服務節點過載,保障系統的穩定性與高效性,成為關鍵問題。負載均衡技術便是解決這一問題的重要手段。Spring Cloud LoadBalancer 作為 Sprin…

Linux內核內存管理相關的配置參數

Linux內核內存管理相關的配置參數(主要位于/proc/sys/vm/目錄下),用于調整內存分配、緩存管理、交換機制、OOM(內存溢出)策略等核心內存行為。以下是對每個參數的詳細解釋: admin_reserve_kbytes block_dum…

Web開發 01

先放一下自己寫的手敲的第一個網站代碼&#xff01;~雖然很簡單但還是有點成就感&#xff01;&#xff01;開心&#x1f60a;<!DOCTYPE html> <html><head><title>Title!</title><link rel "stylesheet"href "style.css"…

Redis 生產實戰 7×24:容量規劃、性能調優、故障演練與成本治理 40 條軍規

&#xff08;一&#xff09;寫在前面&#xff1a;為什么需要“軍規” Redis 在測試環境跑得飛快&#xff0c;一到線上就“莫名其妙”抖動&#xff1b;大促前擴容 3 倍&#xff0c;成本卻翻 5 倍&#xff1b;一次主從切換&#xff0c;緩存雪崩導致下游 DB 被打掛&#xff1b;開發…

【DOCKER】綜合項目 MonitorHub (監控中心)

文章目錄1、項目架構圖1.1 架構組件2、實際實施2.1 安裝docker2.2 編寫dockerfile文件2.2.1 Prometheus2.2.2 node_exporter2.2.3 nginxvts模塊2.2.4 nginx_exporeter 服務發現文件2.2.5 maridb dockerfile文件2.2.6 鏡像總數2.3 具體操作2.3.1 Prometheus組件2.3.2 nginx組件2…

Java List 集合詳解:從基礎到實戰,掌握 Java 列表操作全貌

作為一名 Java 開發工程師&#xff0c;你一定在項目中頻繁使用過 List 集合。它是 Java 集合框架中最常用、最靈活的數據結構之一。無論是從數據庫查詢出的數據&#xff0c;還是前端傳遞的參數列表&#xff0c;List 都是處理這些數據的首選結構。本文將帶你全面掌握&#xff1a…

SGMD辛幾何模態分解 直接替換Excel運行包含頻譜圖相關系數圖 Matlab語言!

SGMD辛幾何模態分解 直接替換Excel運行包含頻譜圖相關系數圖 Matlab語言算法近幾年剛提出&#xff0c;知網還沒幾個人用&#xff0c;你先用&#xff0c;你就是創新&#xff01;算法新穎小眾&#xff0c;用的人很少&#xff0c;包含分解圖、頻譜圖、相關系數圖&#xff0c;效果如…

Oracle數據泵詳解——讓數據遷移像“點外賣”一樣簡單?

?今天我想和大家聊一個數據庫領域的“萬能搬運工”——Oracle數據泵&#xff08;Data Pump&#xff09;?。相信很多人都有過這樣的經歷&#xff1a;業務要上線新系統&#xff0c;得把舊庫的數據搬到新環境&#xff1b;或者領導突然要一份3年前的歷史數據&#xff0c;可不能影…

Leetcode 03 java

爬樓梯算法現在只看明白動態規劃&#xff0c;也沒有很難喲&#xff01;&#xff01;題目70. 爬樓梯假設你正在爬樓梯。需要 n 階你才能到達樓頂。每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢&#xff1f;java題解class Solution {public int climbStairs(…

怎么刪除 wps 的右鍵菜單

打開 WPS 點擊 WPS Office 選項卡&#xff0c;點擊右側全局配置》配置和修復工具點擊高級功能定制下的都可以關閉和隱藏點擊確定就可以了。

C++:list

一&#xff0c;list的介紹1&#xff0c;list初步&#xff08;1&#xff09;list是 C 標準模板庫 (STL) 中的一個雙向鏈表容器。它允許在常數時間內進行任意位置的插入和刪除操作&#xff0c;但不支持隨機訪問。&#xff08;2&#xff09;list容器的底層數據結構為帶頭雙向循環鏈…

深入理解Collections.addAll方法

文章目錄深入理解Collections.addAll方法概述方法定義基本用法1. 向List添加元素2. 向Set添加元素3. 添加數組元素與傳統add方法的比較使用傳統add方法使用Collections.addAll性能考慮注意事項實際應用場景與Collection.addAll的區別最佳實踐總結深入理解Collections.addAll方法…

CISP-PTE 練習題(完整一套)

目錄 1、SQL注入 2、文件上傳 3、文件包含 4、代碼審計 5、命令執行 6、端口掃描 7、sql 寫 webshell 8、3389 遠程桌面利用 1、SQL注入 sqllabs-less-24 二次注入 2、文件上傳 沒有對文件后綴進行檢測&#xff0c;但是對文件類型有檢測&#xff0c;需要使用圖片頭繞…

Vue3入門-計算屬性+監聽器

&#x1f3e0;個人主頁&#xff1a;Yui_ &#x1f351;操作環境&#xff1a;vscode\node.js &#x1f680;所屬專欄&#xff1a;Vue3 文章目錄1. 計算屬性1.1 computed函數1.2 計算屬性VS普通函數1.3 計算屬性的完整寫法2. 監聽器3.總結1. 計算屬性 計算屬性&#xff08;compu…

Linux Swap區深度解析:為何禁用?何時需要?

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄前言一、Swap區&#xff1a;Linux的"內存救生圈"二、為什么要禁用Swap&#xff1f;性能的隱形殺手三、何時應該使用Swap&#xff1f;不可或缺的場景四、如…

用TensorFlow進行邏輯回歸(三)

邏輯回歸Logistic regression這個腳本展示如何用TensorFlow求解邏輯回歸。 ()ysigmoid(Axb)我們使用低出生重量數據,特別地:y 0 or 1 low birth weightx demographic and medical history dataimport matplotlib.pyplot as pltimport numpy as npimport tensorflow as tfimp…