RocketMQ 消息中間件 知識點匯總

目錄

  • RocketMQ
    • 1、什么是RocketMQ?
      • 常用術語:
    • 2、為什么需要消息隊列
    • 3、什么是異步處理
    • 4、什么是服務解耦
    • 5、什么是流量控制
    • 6、消息隊列兩種模型
      • 隊列模型:
      • 發布/訂閱模型:
      • 總結:
    • 7、怎么保證消息不丟失
    • 8、如何處理消息被重復消費
      • **出現消息重復的情況:**
      • **解決方法:**
    • 9、如何保證消息的有序性
      • 全局有序
      • 部分有序
    • 10、如何處理消息堆積
      • **1、業務邏輯處理:**
      • **2、生產者producer限流**:限制發送消息的速度
      • **3、水平擴容:**
        • **問題:MQ積壓了幾百萬數據**

RocketMQ

1、什么是RocketMQ?

RocketMQ 是一個消息中間件,使用的數據存儲結構是隊列,隊列的特點是先進先出。消息隊列就是一個使用隊列來通信的組件。

常用術語:

RocketMQ(nameserver(broker(topic(MessageQueue(msg

Message: msg 消息

Message Queue: 消息存儲的隊列,可以有很多個消息隊列,這些消息隊列是存在broker里面的。

topic: 由一個或多個消息隊列Message Queue 隊列組成,為了做業務上的分類。

tag: 標簽,對msg打個標簽

broker: 這些消息隊列肯定會保存在某一臺生產服務器上,而這臺生產服務器我們就稱為 broker

nameserver: 服務注冊中心(就是各個服務的節點信息注冊到這個注冊中心里面)

在這里插入圖片描述

發送消息的是生產者producer,
接收消費消息的為消費者consumer,
消息隊列服務端為broker。

消息從producer發往broker,broker將消息存儲到本地,然后consumer從broker拉取消息,或者broker推送消息至consumer,最后消費。

在這里插入圖片描述

為了提高并發度,



2、為什么需要消息隊列

因為隨著業務不斷擴張,從之前的單體架構到現在的微服務架構,成百上千的服務之間的相互調用和依賴,我們需要一個東西來解耦各個服務之間的關系,控制資源合理的使用以及緩沖流量洪峰等等。

這個時候消息隊列就應運而生。它常用來實現:異步處理、服務解耦、流量控制。



3、什么是異步處理

隨著業務的發展,項目的請求鏈路會越來越長。比如之前的簡單的查庫存、下單,到后面的加上積分服務、短信服務等,這一路同步調用下來,客戶可能就等著急了,這個時候就可以使用消息隊列來進行異步處理。

調用鏈路長,響應就會變慢,對于一些不需要那么及時的功能,比如短信或者加積分之類的,只需要在下單結束后,扔個消息到消息隊列中就可以直接返回響應了。積分服務和短信服務可以并行的消費這條消息。

優點:消息隊列的異步處理可以減少請求的等待時間,還能讓服務異步

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

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

相關文章

流量分析-PhishingEmail_WriteUp

一、題目問題 問題1:黑客的email名稱 問題2:黑客向幾人發送了釣魚郵件 問題3:黑客傳輸的木馬文件名 問題4:下載并運行了木馬文件的人的email名稱和ip地址,用“-”連接 問題5:黑客用于反彈shell的主機i…

什么葡萄酒會適用這種雙重潷析方法呢?

潷析有兩個主要目的,一種是去除陳年或未經過濾的葡萄酒中的沉淀物。雖然沉淀物不會對你造成任何傷害,但當喝葡萄酒滿嘴都是葡萄沉淀物時是一件很糟糕的事。其次,傾析葡萄酒是可以讓葡萄酒“呼吸”與氧氣接觸的,氧氣可以軟化單寧&a…

二維數值型數組例題

1、單位矩陣初始化 題目描述 對用作單位矩陣的數組初始化。單位矩陣在主對角線上的值為1,而其他的地方的值為0,并且主對角線上的行、列下標是一樣的。 輸入要求 輸入一個整數n表示矩陣的行數 輸出要求 輸出n*n的單位矩陣。數據之間以空格間隔&…

LeetCode Hot100 102.二叉樹的層序遍歷

題目&#xff1a; 給你二叉樹的根節點 root &#xff0c;返回其節點值的 層序遍歷 。 &#xff08;即逐層地&#xff0c;從左到右訪問所有節點&#xff09;。 方法&#xff1a;迭代 class Solution {public List<List<Integer>> levelOrder(TreeNode root) {if …

C語言——輸入一個4位正整數,輸出其逆數。

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int i,j 0;int a1,a2,a3,a4;printf("輸入一個4位正整數&#xff1a;\n");scanf("%d",&i);a1 i/1000; a2 i/100%10; a3 i/10%10; a4 i%10; printf("千位a1%d,百位a…

【JavaFx】利用JavaFx寫一個登錄頁面

以下是一個基本的JavaFX登錄頁面示例: import javafx.application.Application; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.co…

mysql的alter怎么使用?

在MySQL中&#xff0c;ALTER語句用于修改數據庫的表結構。下面是一些ALTER語句的示例用法&#xff1a; 1. 添加列&#xff1a; ALTER TABLE 表名 ADD 列名 數據類型; 2. 修改列的數據類型&#xff1a; ALTER TABLE 表名 MODIFY 列名 新數據類型; 3. 修…

新人工作方法論:高效率的工作

引言&#xff1a; 轉眼間入職半載&#xff0c;在工作期間曾迷茫、困惑&#xff0c;深深的感受到職場身份的轉變帶來的痛苦。痛苦的原因不僅僅包括學生時代自己悶頭做事的思維習慣與團隊合作需求的差異性&#xff0c;也包括缺乏體系的工作方法。 自己在網絡上查了一些方法論&a…

80C51單片機----數據傳送類指令

目錄 一.一般傳送指令&#xff0c;即mov指令 1.16位傳送&#xff08;僅1條&#xff09; 2.8位傳送 &#xff08;1&#xff09;目的字節為A&#xff08;累加器&#xff09; &#xff08;2&#xff09;目的字節為Rn(工作寄存器) &#xff08;3&#xff09;目的字節為direct…

超分辨率重建

意義 客觀世界的場景含有豐富多彩的信息&#xff0c;但是由于受到硬件設備的成像條件和成像方式的限制&#xff0c;難以獲得原始場景中的所有信息。而且&#xff0c;硬件設備分辨率的限制會不可避免地使圖像丟失某些高頻細節信息。在當今信息迅猛發展的時代&#xff0c;在衛星…

導入PIL時報錯

在導入PIL時,報以下錯誤: 查找原因 參考博客 Could not find a version that satisfies the requirement PIL (from versions: ) No matching distributi-CSDN博客,按照wheel后,安裝PIL時,報如下的錯誤。 查找說是python版本與wheel文件版本不同,確認本機python版本 …

C++ 指針進階:動態分配內存

工作原理 malloc 是 stdlib.h 庫中的函數,聲明為 void *__cdecl malloc(size_t _Size); 原理: malloc 函數沿空閑鏈表(位于內存 堆空間 中)申請一塊滿足需求的內存塊,將所需大小的內存塊分配給用戶剩下的返回到鏈表上; 并返回指向該內存區的首地址的指針,意該指針的類型…

ElasticSearch之cat allocation API

查看各節點上各個shard的硬件使用情況&#xff0c;命令樣例如下&#xff1a; curl -X GET "https://localhost:9200/_cat/allocation?vtrue&pretty" --cacert $ES_HOME/config/certs/http_ca.crt -u "elastic:ohCxPHQBEs5*lo7F9"執行結果如下&#x…

MyBatis常見面試題總結

MyBatis常見面試題總結 #{} 和 ${} 的區別是什么&#xff1f; ${}是 Properties 文件中的變量占位符&#xff0c;它可以用于標簽屬性值和 sql 內部&#xff0c;屬于靜態文本替換&#xff0c;比如${driver}會被靜態替換為com.mysql.jdbc. Driver。 #{}是 sql 的參數占位符&…

Nginx模塊開發之http handler實現流量統計(2)

文章目錄 一、概述二、Nginx handler模塊開發2.1、代碼實現2.2、編寫config文件2.3、編譯模塊到Nginx源碼中2.4、修改conf文件2.5、執行效果 總結 一、概述 上一篇【Nginx模塊開發之http handler實現流量統計&#xff08;1&#xff09;】使用數組在單進程實現了IP的流量統計&a…

音視頻項目—基于FFmpeg和SDL的音視頻播放器解析(二十二)

介紹 在本系列&#xff0c;我打算花大篇幅講解我的 gitee 項目音視頻播放器&#xff0c;在這個項目&#xff0c;您可以學到音視頻解封裝&#xff0c;解碼&#xff0c;SDL渲染相關的知識。您對源代碼感興趣的話&#xff0c;請查看基于FFmpeg和SDL的音視頻播放器 如果您不理解本…

MySQL 排序和分組怎么做?

文章目錄 前言MySQL 排序語法在命令提示符中使用 ORDER BY 子句在PHP腳本中使用 ORDER BY 子句 MySQL 分組GROUP BY 語法實例演示使用 WITH ROLLUP 后言 前言 hello world歡迎來到前端的新世界 &#x1f61c;當前文章系列專欄&#xff1a;Mysql &#x1f431;?&#x1f453;博…

Cookie的基本使用

JavaScript Cookie&#xff08;JavaScript 的 Cookie&#xff09;是一種在Web瀏覽器中存儲和檢索用戶信息的機制。它允許網站在用戶計算機上存儲小型數據片段&#xff0c;以便在之后的會話中使用這些數據。Cookie通常用于持久化用戶首選項、跟蹤用戶行為和提供個性化體驗。 通…

堆的實現(堆的插入、堆的刪除等)超級全

堆的實現&#xff08;堆的插入、堆的刪除等&#xff09;超級全 文章目錄 堆的實現&#xff08;堆的插入、堆的刪除等&#xff09;超級全一、前期基礎知識1.樹結構①樹的定義②樹的相關概念③二叉樹④滿二叉樹和完全二叉樹a.滿二叉樹b.完全二叉樹 ⑤二叉樹的性質⑥二叉樹順序結構…

每日OJ題_算法_雙指針_力扣11. 盛最多水的容器

力扣11. 盛最多水的容器 11. 盛最多水的容器 - 力扣&#xff08;LeetCode&#xff09; 難度 中等 給定一個長度為 n 的整數數組 height 。有 n 條垂線&#xff0c;第 i 條線的兩個端點是 (i, 0) 和 (i, height[i]) 。 找出其中的兩條線&#xff0c;使得它們與 x 軸共同構成…