RabbitMQ消息隊列入門(一)——RabbitMQ消息隊列的安裝(Windows環境下)

来源:https://www.cnblogs.com/pual13/archive/2019/07/23/11230709.html
-Advertisement-
Play Games

一、RabbitMQ介紹1、RabbitMQ簡介RabbitMQ是一個消息代理:它接受和轉發消息。你可以把它想象成一個郵局:當你把你想要發佈的郵件放在郵箱中時,你可以確定郵差先生最終將郵件發送給你的收件人。在這個比喻中,RabbitMQ是郵政信箱,郵局和郵遞員。RabbitMQ和郵局的主要區別在於它 ...


一、RabbitMQ介紹
1、RabbitMQ簡介
RabbitMQ是一個消息代理:它接受和轉發消息。你可以把它想象成一個郵局:當你把你想要發佈的郵件放在郵箱中時,你可以確定郵差先生最終將郵件發送給你的收件人。在這個比喻中,RabbitMQ是郵政信箱,郵局和郵遞員。
RabbitMQ和郵局的主要區別在於它不處理紙張,而是接受,存儲和轉發二進位數據塊 - 消息。引自(https://www.rabbitmq.com/tutorials/tutorial-one-java.html)官網介紹。
儘管消息流經RabbitMQ,但它們只能存儲在隊列中。一個隊列只受主機記憶體和磁碟限制的約束,它本質上是一個很大的消息緩衝區。許多生產者可以發送進入一個隊列的消息,並且許多消費者可以嘗試從一個隊列接收數據。實質上是生產者——消費者關係。
2、什麼叫消息隊列
消息(Message)是指在應用間傳送的數據。消息可以非常簡單,比如只包含文本字元串,也可以更複雜,可能包含嵌入對象。
消息隊列(Message Queue)是一種應用間的通信方式,消息發送後可以立即返回,由消息系統來確保消息的可靠傳遞。消息發佈者只管把消息發佈到 MQ 中而不用管誰來取,消息使用者只管從 MQ 中取消息而不管是誰發佈的。這樣發佈者和使用者都不用知道對方的存在。

3、為何用消息隊列
從上面的描述中可以看出消息隊列是一種應用間的非同步協作機制,那什麼時候需要使用 MQ 呢?
以常見的訂單系統為例,用戶點擊【下單】按鈕之後的業務邏輯可能包括:扣減庫存、生成相應單據、發紅包、發簡訊通知。在業務發展初期這些邏輯可能放在一起同步執行,隨著業務的發展訂單量增長,需要提升系統服務的性能,這時可以將一些不需要立即生效的操作拆分出來非同步執行,比如發放紅包、發簡訊通知等。這種場景下就可以用 MQ ,在下單的主流程(比如扣減庫存、生成相應單據)完成之後發送一條消息到 MQ 讓主流程快速完結,而由另外的單獨線程拉取MQ的消息(或者由 MQ 推送消息),當發現 MQ 中有發紅包或發簡訊之類的消息時,執行相應的業務邏輯。
以上是用於業務解耦的情況,其它常見場景包括最終一致性、廣播、錯峰流控等等。
4、RabbitMQ 特點
RabbitMQ 是一個由 Erlang 語言開發的 AMQP 的開源實現。
AMQP :Advanced Message Queue,高級消息隊列協議。它是應用層協議的一個開放標準,為面向消息的中間件設計,基於此協議的客戶端與消息中間件可傳遞消息,並不受產品、開發語言等條件的限制。
RabbitMQ 最初起源於金融系統,用於在分散式系統中存儲轉發消息,在易用性、擴展性、高可用性等方面表現不俗。具體特點包括:
(1)可靠性(Reliability)
RabbitMQ 使用一些機制來保證可靠性,如持久化、傳輸確認、發佈確認。
(2)靈活的路由(Flexible Routing)
在消息進入隊列之前,通過 Exchange 來路由消息的。對於典型的路由功能,RabbitMQ 已經提供了一些內置的 Exchange 來實現。針對更複雜的路由功能,可以將多個 Exchange 綁定在一起,也通過插件機制實現自己的 Exchange 。
(3)消息集群(Clustering)
多個 RabbitMQ 伺服器可以組成一個集群,形成一個邏輯 Broker 。
(4)高可用(Highly Available Queues)
隊列可以在集群中的機器上進行鏡像,使得在部分節點出問題的情況下隊列仍然可用。
(5)多種協議(Multi-protocol)
RabbitMQ 支持多種消息隊列協議,比如 STOMP、MQTT 等等。
(6)多語言客戶端(Many Clients)
RabbitMQ 幾乎支持所有常用語言,比如 Java、.NET、Ruby 等等。
(7)管理界面(Management UI)
RabbitMQ 提供了一個易用的用戶界面,使得用戶可以監控和管理消息 Broker 的許多方面。
(8)跟蹤機制(Tracing)
如果消息異常,RabbitMQ 提供了消息跟蹤機制,使用者可以找出發生了什麼。
(9)插件機制(Plugin System)
RabbitMQ 提供了許多插件,來從多方面進行擴展,也可以編寫自己的插件。

5、RabbitMQ 中的概念模型——消息模型

所有 MQ 產品從模型抽象上來說都是一樣的過程:
消費者(consumer)訂閱某個隊列。生產者(producer)創建消息,然後發佈到隊列(queue)中,最後將消息發送到監聽的消費者。

6、RabbitMQ 基本概念

上面只是最簡單抽象的描述,具體到 RabbitMQ 則有更詳細的概念需要解釋。上面介紹過 RabbitMQ 是 AMQP 協議的一個開源實現,所以其內部實際上也是 AMQP 中的基本概念:

(1)Message
消息,消息是不具名的,它由消息頭和消息體組成。消息體是不透明的,而消息頭則由一系列的可選屬性組成,這些屬性包括routing-key(路由鍵)、priority(相對於其他消息的優先權)、delivery-mode(指出該消息可能需要持久性存儲)等。
(2)Publisher
消息的生產者,也是一個向交換器發佈消息的客戶端應用程式。
(3)Exchange
交換器,用來接收生產者發送的消息並將這些消息路由給伺服器中的隊列。
(4)Binding
綁定,用於消息隊列和交換器之間的關聯。一個綁定就是基於路由鍵將交換器和消息隊列連接起來的路由規則,所以可以將交換器理解成一個由綁定構成的路由表。
(5)Queue
消息隊列,用來保存消息直到發送給消費者。它是消息的容器,也是消息的終點。一個消息可投入一個或多個隊列。消息一直在隊列裡面,等待消費者連接到這個隊列將其取走。
(6)Connection
網路連接,比如一個TCP連接。
(7)Channel
通道,多路復用連接中的一條獨立的雙向數據流通道。通道是建立在真實的TCP連接內地虛擬連接,AMQP 命令都是通過通道發出去的,不管是發佈消息、訂閱隊列還是接收消息,這些動作都是通過通道完成。因為對於操作系統來說建立和銷毀 TCP 都是非常昂貴的開銷,所以引入了通道的概念,以復用一條 TCP 連接。
(8)Consumer
消息的消費者,表示一個從消息隊列中取得消息的客戶端應用程式。
(9)Virtual Host
虛擬主機,表示一批交換器、消息隊列和相關對象。虛擬主機是共用相同的身份認證和加密環境的獨立伺服器域。每個 vhost 本質上就是一個 mini 版的 RabbitMQ 伺服器,擁有自己的隊列、交換器、綁定和許可權機制。vhost 是 AMQP 概念的基礎,必須在連接時指定,RabbitMQ 預設的 vhost 是 / 。
(10)Broker
表示消息隊列伺服器實體。
二、RabbitMQ的安裝
1、Erlang的安裝
首先,您需要安裝支持的 Windows 版Erlang。下載並運行Erlang for Windows 安裝程式。下載地址http://www.erlang.org/downloads,我是64位的所以下載的64位版本。官網下載速度很慢,下載完成後直接安裝,一直NEXT就行。

2、RabbitMQ安裝程式
運行RabbitMQ安裝程式rabbitmq-server-3.7.15.exe(下載地址https://www.rabbitmq.com/install-windows.html)註意版本,當前最新版本為3.7.16。它將RabbitMQ安裝為Windows服務並使用預設配置啟動它。同樣,一直NEXT就行。

3、配置自定義環境變數

1、erl環境變數配置

在Path中加入 %ERLANG_HOME%\bin(註意後面不可有分號)

測試erl配置是否正確,開始-運行-cmd,輸入erl,顯示如下,證明配置正確

(2)新建RabbitMQ環境變數配置
這裡註意,看好你RabbitMQ的安裝位置,以及安裝的版本,我的版本為3.7.15

RABBITMQ_SERVER=“D:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.15”

在Path中加入    %RABBITMQ_SERVER%\sbin(註意後面不可有分號)

 4、激活rabbitmq_management

註:此處用管理員身份運行CMD命令

"環境變數配置的安裝路徑例如我的(D:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.15\sbin\rabbitmq-plugins.bat enable rabbitmq_management"

5、啟動RabbitMQ服務

net start RabbitMQ

因為RabbitMQ預設啟動的,當鍵入啟動命令時,會出現如下情況,直接關閉RabbitMQ服務,在啟動就行,

關閉RabbitMQ服務命令如下:

   net stop RabbitMQ

三、RabbitMQ測試

 測試地址 http://localhost:15672/
預設的用戶名:guest
預設的密碼為:guest

 

此時,RabbitMQ服務已經安裝完成了

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • import os def file_handler(backend_data,res=None,type='fetch'): # 查詢功能 if type == 'fetch': with open('test_new.txt','r') as read_f: ret = [] ... ...
  • 介紹 使用函數式編程來豐富面向對象編程的想法是陳舊的。將函數編程功能添加到面向對象的語言中會帶來面向對象編程設計的好處。 一些舊的和不太老的語言,具有函數式編程和麵向對象的編程: 例如,Smalltalk和Common Lisp。 最近是Python或Ruby。 面向對象編程中模擬的函數式編程技術 ...
  • 1.背景 由於歷史原因,筆者所在的公司原有的ES查詢驅動採用的是 PlainElastic.Net, 經過詢問原來是之前PlainElastic.Net在園子里文檔較多,上手比較容易,所以最初作者選用了該驅動,而發佈也由於歷史原因都部署在 windows 伺服器上,基於 .NET Framework ...
  • 一、C#實現本地文件下載 1、文件下載的路徑 文件名稱 以及文件下載之後要放的位置 這三個變數是必須要的 2、定義以下四個對象: FileWebRequest ftpWebRequest = null; FileWebResponse ftpWebResponse = null; Stream ft ...
  • 小白開學Asp.Net Core 《九》 — — 前端篇(不務正業) 在《小白開學Asp.Net Core 三》中使用了X-admin 2.x 和 Layui將管理後端的界面重新佈局了,裡面簡單的介紹了layui table 的使用以及頁面table所需的數據做了簡單的封裝。今天擴展學習下。 一、L ...
  • ADO.NET進行參數化時會自動將參數值包含在單引號中,除了特殊需求,最好不要自己手動添加單引號。ADO.NET中識別參數標識是使用符號@,如果在SQL語句中將參數標識放在單引號中,單引號中的參數標識只會被當成字元串! 所以要對LIKE語句進行參數化查詢時,就要先對參數值進行格式化,在傳參之前就設置 ...
  • 本地化(Localization)也就是多語言功能,藉此用戶能夠選擇他的母語或熟悉的語言來使用系統,這顯然非常有利於軟體系統推向國際化。一個應用程式的UI界面至少有一種語言,ABP開發框架提供了一個彈性的多語言框架,可以簡化我們在多語言方面的開發時間。利用ABP實現多語言只需要簡單地完成三個步驟:建... ...
  • 最近因為工作需要,客戶那邊工程師使用的是JAVA語言開發的程式,我們這邊平臺中是用C#語言開發的,因為有些操作必須統一,所以我在網上查找解決方法,自己也實踐過,在這裡做個筆記吧,分享一下。 一、使用C#編寫com組件 開發環境 :VS2017 1、新建工程:CalcTest(類庫項目,根據自己喜好需 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...