最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

1小時快速上手RabbitMQ(簡介及安裝過程)

 更新時間:2023年01月04日 10:20:06   作者:半舊518  
RabbitMQ簡稱MQ全稱是Message Queue(消息隊列),是在消息的傳輸過程中保存消息的容器,多用于分布式系統(tǒng)之間進行通信,本文給大家講解了RabbitMQ簡介與安裝,結(jié)合實例代碼給大家介紹的非常詳細,需要的朋友跟隨小編一起看看吧

前 言
?? 作者簡介:半舊518,長跑型選手,立志堅持寫10年博客,專注于java后端
?專欄簡介:深入、全面、系統(tǒng)的介紹消息中間件
?? 文章簡介:本文將介紹RabbitMQ,一小時快速上手RabbitMQ

1.MQ的介紹

1.1 MQ的基本概念

1.2 MQ的優(yōu)缺點

下面是MQ的優(yōu)缺點

1.2.1 優(yōu)點1:應用解耦

考慮由訂單系統(tǒng)與庫存系統(tǒng)、支付系統(tǒng)、物流系統(tǒng)直接通過遠程調(diào)用方式通信,模塊耦合度較高的情況。

會存在問題:

(1)容錯性較低。

一個庫存系統(tǒng)出問題,通信鏈路斷了,訂單下單就失敗了。

(2)可維護性低
增加x系統(tǒng),需要修改訂單系統(tǒng)的代碼。再加再改,撤回也改。

引入消息中間件MQ后。訂單系統(tǒng)作為消息生產(chǎn)者生產(chǎn)訂單消息生產(chǎn)消息到MQ,庫存、支付、物流作為消息消費者消費消息。即使庫存系統(tǒng)出現(xiàn)問題,也可以在恢復以后再從MQ中消費消息,而不會導致訂單失敗。

擴展新的x系統(tǒng),只需要x系統(tǒng)把MQ中的消息再消費一次即可,訂單系統(tǒng)無需改代碼。

1.2.2 優(yōu)點2:異步提速

引入中間件之前,需要同步完成訂單系統(tǒng)對其它模塊的調(diào)用,即調(diào)用庫存返回后調(diào)用支付,調(diào)用支付返回后調(diào)用物流。

引入中間件之后,25ms返回請求。

1.2.3 優(yōu)點3:削峰填谷

引入消息中間件前,假如A系統(tǒng)來個秒殺活動,會寄。

引入之后,MQ就像一個大倉庫,5000個請求,對MQ小意思。A系統(tǒng)慢慢從倉庫里運貨吧。

1.2.4 缺點

1.3常見的消息中間件

2.RabbitMQ的介紹與安裝

2.1 RabbitMQ簡介

2.2 JMS概念

2.3 RabbitMQ安裝

官網(wǎng)地址:https://www.rabbitmq.com/

往下翻一翻,下載軟件和文檔。

由于只是方便學習,本文基于windows安裝rabbitmq,如果使用linux推薦使用docker進行部署。

2.3.1 安裝依賴環(huán)境

由于rabbitmq是基于erlang語言開發(fā)的,因此需要有erlang語言環(huán)境。

先看看官方文檔中,對于erlang的版本要求說明。

https://www.rabbitmq.com/which-erlang.html

可以看到,不同版本的rabbitmq需要的erlang版本不同。這里我們使用3.11.5版的rabbitmq。因此需要的erlang版本是25.0-25.2

通過下列網(wǎng)址可以下載erlang25.2:https://www.erlang.org/patches/otp-25.2

選擇下圖中的windows installer,下載exe安裝包。

點擊exe文件安裝即可。

配置環(huán)境變量。

cmd鍵入erl -version判斷是否配置成功

C:\Users\24724>erl -version
Erlang (SMP,ASYNC_THREADS) (BEAM) emulator version 13.1.3

2.3.2 安裝rabbitmq

下載exe安裝包。
https://www.rabbitmq.com/install-windows.html

版本選用:3.11.5

雙擊安裝。從安裝目錄打開cmd,

使用如下命令安裝管理頁面的插件

rabbitmq-plugins enable rabbitmq_management

雙擊bat腳本啟動

這時,打開瀏覽器輸入http://localhost:15672,賬號密碼默認是:guest/guest

大功告成咯!

2.4 rabbitmq管控臺的使用

rabbitmq的管控臺還是比較友好的,可以隨便點點。這里帶大家簡單熟悉下。

添加用戶。

添加虛擬機。

點擊添加的虛擬機ittest,進入詳情頁面為其授權(quán)。

授權(quán)成功。

其它的您自己點點點吧,很簡單。

3.RabbitMQ快速入門

3.1 需求描述

RabbitMQ有六種工作模式,先來介紹最簡單的一種,實現(xiàn)一個helloworld。

需求如下:

圖示如下。

3.2 準備工作

idea新建項目rabbitqmdemo,maven模塊rabbitmq-producer,rabbitmq-consumer

在兩個模塊中引入依賴。

 <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.1.7.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.amqp</groupId>
            <artifactId>spring-rabbit</artifactId>
            <version>2.1.8.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.1.7.RELEASE</version>
        </dependency>
    </dependencies>

3.3 生產(chǎn)者實現(xiàn)

producer下新建Producer_HelloWorld.java。

其要實現(xiàn)的代碼邏輯其實看著下圖就會了。

代碼如下。

/**
 *
 * 發(fā)送消息
 */
public class Producer_HelloWorld {
    public static void main(String[] args) throws IOException, TimeoutException {

        //1.創(chuàng)建連接工廠
        ConnectionFactory factory = new ConnectionFactory();
        //2. 設置參數(shù)
        factory.setHost("localhost");//ip  默認值 localhost
        factory.setPort(5672); //端口  默認值 5672
        factory.setVirtualHost("/ittest");//虛擬機 默認值/
        factory.setUsername("guest");//用戶名 默認 guest
        factory.setPassword("guest");//密碼 默認值 guest
        //3. 創(chuàng)建連接 Connection
        Connection connection = factory.newConnection();
        //4. 創(chuàng)建Channel
        Channel channel = connection.createChannel();
        //5. 創(chuàng)建隊列Queue
        /*
        queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> arguments)
        參數(shù):
            1. queue:隊列名稱
            2. durable:是否持久化,當mq重啟之后,還在
            3. exclusive:
                * 是否獨占。只能有一個消費者監(jiān)聽這隊列
                * 當Connection關(guān)閉時,是否刪除隊列
                *
            4. autoDelete:是否自動刪除。當沒有Consumer時,自動刪除掉
            5. arguments:參數(shù)。

         */
        //如果沒有一個名字叫hello_world的隊列,則會創(chuàng)建該隊列,如果有則不會創(chuàng)建
        channel.queueDeclare("hello_world",true,false,false,null);
        /*
        basicPublish(String exchange, String routingKey, BasicProperties props, byte[] body)
        參數(shù):
            1. exchange:交換機名稱。簡單模式下交換機會使用默認的 ""
            2. routingKey:路由名稱
            3. props:配置信息
            4. body:發(fā)送消息數(shù)據(jù)

         */

        String body = "hello rabbitmq~~~";

        //6. 發(fā)送消息
        channel.basicPublish("","hello_world",null,body.getBytes());


        //7.釋放資源
        channel.close();
        connection.close();
    }
}

代碼運行前,guest用戶的管控臺是這樣的,沒有queue

管控臺變成了這個樣子

3.4 消費者實現(xiàn)

consumer模塊新建Consumer_HelloWorld.java。

public class Consumer_HelloWorld {
    public static void main(String[] args) throws IOException, TimeoutException {
        //1.創(chuàng)建連接工廠
        ConnectionFactory factory = new ConnectionFactory();
        //2. 設置參數(shù)
        factory.setHost("localhost");//ip  默認值 localhost
        factory.setPort(5672); //端口  默認值 5672
        factory.setVirtualHost("/ittest");//虛擬機 默認值/
        factory.setUsername("guest");//用戶名 默認 guest
        factory.setPassword("guest");//密碼 默認值 guest
        //3. 創(chuàng)建連接 Connection
        Connection connection = factory.newConnection();
        //4. 創(chuàng)建Channel
        Channel channel = connection.createChannel();
        //5. 創(chuàng)建隊列Queue
        /*
        queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> arguments)
        參數(shù):
            1. queue:隊列名稱
            2. durable:是否持久化,當mq重啟之后,還在
            3. exclusive:
                * 是否獨占。只能有一個消費者監(jiān)聽這隊列
                * 當Connection關(guān)閉時,是否刪除隊列
                *
            4. autoDelete:是否自動刪除。當沒有Consumer時,自動刪除掉
            5. arguments:參數(shù)。

         */
        //如果沒有一個名字叫hello_world的隊列,則會創(chuàng)建該隊列,如果有則不會創(chuàng)建
        channel.queueDeclare("hello_world",true,false,false,null);

        /*
        basicConsume(String queue, boolean autoAck, Consumer callback)
        參數(shù):
            1. queue:隊列名稱
            2. autoAck:是否自動確認
            3. callback:回調(diào)對象

         */
        // 接收消息
        Consumer consumer = new DefaultConsumer(channel){
            /*
                回調(diào)方法,當收到消息后,會自動執(zhí)行該方法

                1. consumerTag:標識
                2. envelope:獲取一些信息,交換機,路由key...
                3. properties:配置信息
                4. body:數(shù)據(jù)

             */
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                System.out.println("consumerTag:"+consumerTag);
                System.out.println("Exchange:"+envelope.getExchange());
                System.out.println("RoutingKey:"+envelope.getRoutingKey());
                System.out.println("properties:"+properties);
                System.out.println("body:"+new String(body));
            }
        };
        channel.basicConsume("hello_world",true,consumer);


        //關(guān)閉資源?不要,因為要一直監(jiān)聽消息
    }
}

執(zhí)行結(jié)果如下,消費者成功的拿到了消息。

到此這篇關(guān)于1小時快速上手RabbitMQ的文章就介紹到這了,更多相關(guān)RabbitMQ快速上手內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關(guān)文章

  • 基于java中泛型的總結(jié)分析

    基于java中泛型的總結(jié)分析

    本篇文章介紹了,在java中泛型的總結(jié)分析。需要的朋友參考下
    2013-05-05
  • java8中的HashMap原理詳解

    java8中的HashMap原理詳解

    這篇文章主要介紹了java8中的HashMap原理詳解,HashMap是日常開發(fā)中非常常用的容器,HashMap實現(xiàn)了Map接口,底層的實現(xiàn)原理是哈希表,HashMap不是一個線程安全的容器,需要的朋友可以參考下
    2023-09-09
  • Java 凍結(jié)或解除凍結(jié)Excel中的行和列的方法

    Java 凍結(jié)或解除凍結(jié)Excel中的行和列的方法

    這篇文章主要介紹了Java 凍結(jié)或解除凍結(jié)Excel中的行和列的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • 比較排序之冒泡排序的實現(xiàn)

    比較排序之冒泡排序的實現(xiàn)

    下面小編就為大家?guī)硪黄容^排序之冒泡排序的小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧實現(xiàn)。
    2017-06-06
  • maven倉庫訪問順序小結(jié)

    maven倉庫訪問順序小結(jié)

    在日常操作中,相信很多人在maven倉庫的優(yōu)先級順序是什么問題上存在疑惑,本文就來介紹一下maven倉庫訪問順序,具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • SpringBoot項目集成Flyway進行數(shù)據(jù)庫版本控制的詳細教程

    SpringBoot項目集成Flyway進行數(shù)據(jù)庫版本控制的詳細教程

    這篇文章主要介紹了SpringBoot項目集成Flyway進行數(shù)據(jù)庫版本控制,本文分步驟通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • Mybatis的Mapper中的方法為什么不能重載

    Mybatis的Mapper中的方法為什么不能重載

    這篇文章主要介紹了Mybatis的Mapper中的方法為什么不能重載,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • kotlin和Java的相互調(diào)用示例詳解

    kotlin和Java的相互調(diào)用示例詳解

    Kotlin 的設計過程中就考慮到了與 Java 的互操作性。在 Kotlin 中可以直接調(diào)用既有的 Java 代碼, 反過來在 Java 中也可以很流暢地使用 Kotlin 代碼,下面這篇文章主要給大家介紹了關(guān)于kotlin和Java的相互調(diào)用的相關(guān)資料,需要的朋友可以參考下。
    2018-02-02
  • java簡單實現(xiàn)自定義日歷

    java簡單實現(xiàn)自定義日歷

    這篇文章主要為大家詳細介紹了java簡單實現(xiàn)自定義日歷,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Java用Cookie限制點贊次數(shù)(簡版)

    Java用Cookie限制點贊次數(shù)(簡版)

    最近做了一個項目,其中有項目需求是,要用cookie實現(xiàn)限制點贊次數(shù),特此整理,把實現(xiàn)代碼分享給大家供大家學習
    2016-02-02

最新評論

孟州市| 昌乐县| 冷水江市| 磐安县| 舞钢市| 邻水| 武穴市| 怀化市| 利川市| 昭觉县| 安陆市| 郎溪县| 徐水县| 长顺县| 莱芜市| 保康县| 尚志市| 永和县| 蓬安县| 嘉定区| 平陆县| 博野县| 自治县| 鹿邑县| 沁源县| 兴文县| 萝北县| 丘北县| 茌平县| 双柏县| 瑞昌市| 延川县| 洛阳市| 山丹县| 大田县| 华蓥市| 班玛县| 德州市| 富源县| 乌什县| 明光市|