RabbitMQ在Windows環境下的安裝與使用

来源:https://www.cnblogs.com/matd/archive/2019/03/02/10462912.html
-Advertisement-
Play Games

環境配置 部署環境 部署環境:windows server 2008 r2 enterprise 官方安裝部署文檔:http://www.rabbitmq.com/install-windows.html官方文檔說明 下載erlang 原因在於RabbitMQ服務端代碼是使用併發式語言erlang編 ...


環境配置

部署環境

部署環境:windows server 2008 r2 enterprise

官方安裝部署文檔:http://www.rabbitmq.com/install-windows.html官方文檔說明

下載erlang

原因在於RabbitMQ服務端代碼是使用併發式語言erlang編寫的,下載地址:http://www.erlang.org/downloads或者Erlang Windows二進位文件,雙擊.exe文件進行安裝就好,安裝完成之後創建一個名為ERLANG_HOME的環境變數,其值指向erlang的安裝目錄,同時將%ERLANG_HOME%\bin加入到Path中,最後打開命令行,輸入erl,如果出現erlang的版本信息就表示erlang語言環境安裝成功;

下載RabbitMQ

下載地址:http://www.rabbitmq.com/,同樣雙擊.exe進行安裝就好(這裡需要註意一點,預設的安裝目錄是C:/Program Files/....,這個目錄中是存在空格符的,我們需要改變安裝目錄,貌似RabbitMQ安裝目錄中是不允許有空格的,我之前踩過這個大坑);

安裝RabbitMQ-Plugins

這個相當於是一個管理界面,方便我們在瀏覽器界面查看RabbitMQ各個消息隊列以及exchange的工作情況,安裝方法是:打開命令行cd進入rabbitmq的sbin目錄(我的目錄是:E:\software\rabbitmq\rabbitmq_server-3.6.5\sbin),輸入:rabbitmq-plugins enable rabbitmq_management命令,稍等會會發現出現plugins安裝成功的提示,預設是安裝6個插件,如果你在安裝插件的過程中出現了下麵的錯誤:        

   解決方法是:首先在命令行輸入:rabbitmq-service stop,接著輸入rabbitmq-service remove,再接著輸入rabbitmq-service install,接著輸入rabbitmq-service start,最後重新輸入rabbitmq-plugins enable rabbitmq_management試試,我是這樣解決的;

RabbitMQ簡介

官方頁面,下載對應的安裝包,註意,RabbitMQ安裝的時候會占用幾個埠,防火牆和其他安全工具可能會阻止RabbitMQ綁定到埠。當這種情況發生時,RabbitMQ將無法啟動。確保可以打開以下埠,當然也可以安裝好後自己通過修改配置文件來修改占用的埠,然後開啟服務。

  • 4369:epmd,RabbitMQ節點和CLI工具使用的對等發現服務
  • 5672,5671:由AMQP 0-9-1和1.0客戶端使用,不帶TLS和TLS
  • 25672:Erlang分發用於節點間和CLI工具通信,並從動態範圍分配(預設情況下限製為單個埠,計算為AMQP埠+ 20000)。有關詳細信息,請參閱網路指南
  • 15672:HTTP API客戶端和rabbitmqadmin(僅當啟用管理插件時)
  • 61613,61414:沒有和使用TLS的STOMP客戶端(只有啟用了STOMP插件
  • 1883,8883 :( MQTT客戶端沒有和帶有TLS,如果啟用了MQTT插件
  • 15674:STOMP-over-WebSockets客戶端(只有啟用了Web STOMP插件
  • 15675:MQTT-over-WebSockets客戶端(僅當啟用了Web MQTT插件時)

 

安裝成功後再開始菜單中可以找到所有安裝的應用以及插件。

開啟服務

 

查看網頁管理

插件安裝完之後,在瀏覽器輸入http://localhost:15672進行驗證,你會看到下麵界面,輸入用戶名:guest,密碼:guest你就可以進入管理界面,當然用戶名密碼你都可以變的;

配置允許遠程訪問

更多情況下,隊列服務往往不在我們本機上,我們需要遠程來控制RabbitMQ,但是預設是無法通過http://server-name:15672來訪問的,可以通過修改\RabbitMQ Server\rabbitmq_server-3.6.10\etc 下Rabbitmq.config來設置允許guest用戶遠程登錄,具體修改為如下值,然後就到服務管理器中重啟RabbitMQ服務。

預設RabbitMQ會在C:\Users\Administrator\AppData\Roaming\RabbitMQ 中生成一個配置文件,rabbitmq.config 裡面就是實際用到的配置信息,如果圖方便,也可以這裡直接改。

[{rabbit, [{loopback_users, [guest]}]}].

RabbitMQ概念

producer:消息生產者

    consumer:消息消費者

     virtual host:虛擬主機,在RabbitMQ中,用戶只能在虛擬主機的層面上進行一些許可權設置,比如我可以訪問哪些隊列,我可以處理哪些請求等等;

     broker:消息轉發者,也就是我們RabbitMQ服務端充當的功能了,那麼消息是按照什麼規則進行轉發的呢?需要用到下麵幾個概念;

     exchange:交換機,他是和producer直接進行打交道的,有點類似於路由器的功能,主要就是進行轉發操作的唄,那麼producer到底用哪個exchange進行路由呢?這個取決於routing key(路由鍵),每個消息都有這個鍵,我們也可以自己設定,其實就是一字元串;

     queue:消息隊列,用於存放消息,他接收exchange路由過來的消息,我們可以對隊列內容進行持久化操作,那麼queue到底接收那個exchange路由的消息呢?這個時候就要用到binding key(綁定鍵)了,綁定鍵會將隊列和exchange進行綁定,至於綁定方式,RabbitMQ提供了多種方式,大家可以看看鴻洋大神的RabbitMQ博客系列(點擊查看);

     以上就是RabbitMQ涉及到的一些概念了,用一張圖表示這些概念之間的關係就是:

 

 

 RabbitMQ簡單使用

producer(生產者)端步驟:

    (1):創建ConnectionFactory,並且設置一些參數,比如hostname,portNumber等等

    (2):利用ConnectionFactory創建一個Connection連接

    (3):利用Connection創建一個Channel通道

    (4):創建queue並且和Channel進行綁定

    (5):創建消息,並且發送到隊列中

     註意,在我們當前的例子中,並沒有用到exchange交換機,RabbitMQ預設情況下是會創建一個空字元串名字的exchange的,如果我們沒有創建自己的exchange的話,預設就是使用的這個exchange;

     producer端代碼(引用RabbitMQ.Client):

複製代碼
  //引用 RabbitMQ.Client、RabbitMQ.ServiceModel
  public class Sender { private final static String QUEUE_NAME = "MyQueue"; public static void main(String[] args) { send(); } public static void send() { ConnectionFactory factory = null; Connection connection = null; Channel channel = null; try { factory = new ConnectionFactory(); factory.setHost("localhost"); connection = factory.newConnection(); channel = connection.createChannel(); channel.queueDeclare(QUEUE_NAME, false, false, false, null); String message = "my first message ....."; channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF-8")); System.out.println("已經發送消息....."+message); } catch (IOException e) { e.printStackTrace(); } catch (TimeoutException e) { e.printStackTrace(); }finally{ try { //關閉資源 channel.close(); connection.close(); } catch (IOException e) { e.printStackTrace(); } catch (TimeoutException e) { e.printStackTrace(); } } } }
複製代碼

 consumer(消費者)端步驟:

     (1):創建ConnectionFactory,並且設置一些參數,比如hostname,portNumber等等

     (2):利用ConnectionFactory創建一個Connection連接

     (3):利用Connection創建一個Channel通道

     (4):將queue和Channel進行綁定,註意這裡的queue名字要和前面producer創建的queue一致

     (5):創建消費者Consumer來接收消息,同時將消費者和queue進行綁定

     consumer端代碼:

複製代碼
        public class Receiver {
    private final static String QUEUE_NAME = "MyQueue";
    
    public static void main(String[] args) {
        receive();
    }
    
    public static void receive()
    {
        ConnectionFactory factory = null;
        Connection connection = null;
        Channel channel = null;
        
        try {
            factory = new ConnectionFactory();
            factory.setHost("localhost");
            connection = factory.newConnection();
            channel = connection.createChannel();
            channel.queueDeclare(QUEUE_NAME, false, false, false, null);
            Consumer consumer = new DefaultConsumer(channel){
                @Override
                public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties,
                        byte[] body) throws IOException {
                    System.out.println("11111111111");
                    String message = new String(body, "UTF-8");
                    System.out.println("收到消息....."+message);
                }};
            channel.basicConsume(QUEUE_NAME, true,consumer);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (TimeoutException e) {
            e.printStackTrace();
        }finally{
            try {
                //關閉資源
                channel.close();
                connection.close();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (TimeoutException e) {
                e.printStackTrace();
            }
        }
    }
}
複製代碼
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 有時直接打開本地html文件會使一些web操作無法進行,需要運行一個本地伺服器。 使用nodejs的 可以迅速地啟動一個本地靜態資源伺服器 ...
  • 前言 本次做後臺管理系統,採用的是 AntD 框架。涉及到圖片的上傳,用的是AntD的 "upload" 組件。 前端做文件上傳這個功能,是很有技術難度的。既然框架給我們提供好了,那就直接用唄。結果用的時候,發現 upload 組件的很多bug。下麵來列舉幾個。 備註:本文寫於2019 03 02, ...
  • 背景 公司為提高客服部門溝通效率對接電話呼叫中心,調研後選擇了亞馬遜的Amazon Connect服務,因為是國外業務沒有選擇用阿裡雲,怕有坑。 Amazon Connect後臺 需要在後臺創建“聯繫流”,也就是用戶接通電話後我們提供的一系列功能選項,比如開始放一段歡迎語音,然後提示用戶選擇1,2, ...
  • 今天我們來詳解一下git的各種命令,此為git的第一篇,後續還會有好幾篇,希望大家看了能有所進步 Git Commit Git 倉庫中的提交記錄保存的是你的目錄下所有文件的快照,就像是把整個目錄複製,然後再粘貼一樣,但比複製粘貼優雅許多! Git 希望提交記錄儘可能地輕量,因此在你每次進行提交時,它 ...
  • 在JavaScript中,使用var創建變數,會創建全局變數或局部變數。 只有在非函數內創建的變數,才是全局變數,該變數可以在任何地方被讀取。 而在函數內創建變數時,只有在函數內部才可讀取。在函數外部時,調用函數也無法讀取局部變數。 function test(){ var g = 5; } // ...
  • 計算屬性 1.1 什麼是計算屬性: 插值表達式常用於簡單的運算,當其過長或邏輯複雜時,會難以維護,這時應該使用計算屬性。 插值表達式里的值是JS表達式 所有的計算屬性都以函數的形式寫在Vue實例內的computed選項內,最終返回計算後的結果。 1.2 計算屬性的用法 在一個計算屬性里可以完成各種復 ...
  • MVC設計模式:modle層,view層,controller層 以前學習的servlet其實就是一個java類,或者說經過規範的java類,實際進行跳轉時,還是要在web.xml文件中配置才能正常跳轉。 controller層可以放servlet,在SpringMVC中則可以創建java類通過@c ...
  • 1.hello 1.hello 1.hello 1.hello 消息生產者p將消息放入隊列 消費者監聽隊列,如果隊列中有消息,就消費掉,消息被拿走後,自動從隊列刪除(隱患,消息可能沒有被消費者正確處理,已經消失了,無法恢復) 應用場景:聊天室 案例: 1>.首先準備依賴 <dependency> < ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...