欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

1小時(shí)快速上手RabbitMQ(簡(jiǎn)介及安裝過(guò)程)

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

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

1.MQ的介紹

1.1 MQ的基本概念

1.2 MQ的優(yōu)缺點(diǎn)

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

1.2.1 優(yōu)點(diǎn)1:應(yīng)用解耦

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

會(huì)存在問(wèn)題:

(1)容錯(cuò)性較低。

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

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

引入消息中間件MQ后。訂單系統(tǒng)作為消息生產(chǎn)者生產(chǎn)訂單消息生產(chǎn)消息到MQ,庫(kù)存、支付、物流作為消息消費(fèi)者消費(fèi)消息。即使庫(kù)存系統(tǒng)出現(xiàn)問(wèn)題,也可以在恢復(fù)以后再?gòu)腗Q中消費(fèi)消息,而不會(huì)導(dǎo)致訂單失敗。

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

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

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

引入中間件之后,25ms返回請(qǐng)求。

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

引入消息中間件前,假如A系統(tǒng)來(lái)個(gè)秒殺活動(dòng),會(huì)寄。

引入之后,MQ就像一個(gè)大倉(cāng)庫(kù),5000個(gè)請(qǐng)求,對(duì)MQ小意思。A系統(tǒng)慢慢從倉(cāng)庫(kù)里運(yùn)貨吧。

1.2.4 缺點(diǎn)

1.3常見(jiàn)的消息中間件

2.RabbitMQ的介紹與安裝

2.1 RabbitMQ簡(jiǎn)介

2.2 JMS概念

2.3 RabbitMQ安裝

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

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

由于只是方便學(xué)習(xí),本文基于windows安裝rabbitmq,如果使用linux推薦使用docker進(jìn)行部署。

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

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

先看看官方文檔中,對(duì)于erlang的版本要求說(shuō)明。

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

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

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

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

點(diǎn)擊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

雙擊安裝。從安裝目錄打開(kāi)cmd,

使用如下命令安裝管理頁(yè)面的插件

rabbitmq-plugins enable rabbitmq_management

雙擊bat腳本啟動(dòng)

這時(shí),打開(kāi)瀏覽器輸入http://localhost:15672,賬號(hào)密碼默認(rèn)是:guest/guest

大功告成咯!

2.4 rabbitmq管控臺(tái)的使用

rabbitmq的管控臺(tái)還是比較友好的,可以隨便點(diǎn)點(diǎn)。這里帶大家簡(jiǎn)單熟悉下。

添加用戶(hù)。

添加虛擬機(jī)。

點(diǎn)擊添加的虛擬機(jī)ittest,進(jìn)入詳情頁(yè)面為其授權(quán)。

授權(quán)成功。

其它的您自己點(diǎn)點(diǎn)點(diǎn)吧,很簡(jiǎn)單。

3.RabbitMQ快速入門(mén)

3.1 需求描述

RabbitMQ有六種工作模式,先來(lái)介紹最簡(jiǎn)單的一種,實(shí)現(xiàn)一個(gè)helloworld。

需求如下:

圖示如下。

3.2 準(zhǔn)備工作

idea新建項(xiàng)目rabbitqmdemo,maven模塊rabbitmq-producer,rabbitmq-consumer

在兩個(gè)模塊中引入依賴(lài)。

 <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)者實(shí)現(xiàn)

producer下新建Producer_HelloWorld.java。

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

代碼如下。

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

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

         */
        //如果沒(méi)有一個(gè)名字叫hello_world的隊(duì)列,則會(huì)創(chuàng)建該隊(duì)列,如果有則不會(huì)創(chuàng)建
        channel.queueDeclare("hello_world",true,false,false,null);
        /*
        basicPublish(String exchange, String routingKey, BasicProperties props, byte[] body)
        參數(shù):
            1. exchange:交換機(jī)名稱(chēng)。簡(jiǎn)單模式下交換機(jī)會(huì)使用默認(rèn)的 ""
            2. routingKey:路由名稱(chēng)
            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();
    }
}

代碼運(yùn)行前,guest用戶(hù)的管控臺(tái)是這樣的,沒(méi)有queue

管控臺(tái)變成了這個(gè)樣子

3.4 消費(fèi)者實(shí)現(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è)置參數(shù)
        factory.setHost("localhost");//ip  默認(rèn)值 localhost
        factory.setPort(5672); //端口  默認(rèn)值 5672
        factory.setVirtualHost("/ittest");//虛擬機(jī) 默認(rèn)值/
        factory.setUsername("guest");//用戶(hù)名 默認(rèn) guest
        factory.setPassword("guest");//密碼 默認(rèn)值 guest
        //3. 創(chuàng)建連接 Connection
        Connection connection = factory.newConnection();
        //4. 創(chuàng)建Channel
        Channel channel = connection.createChannel();
        //5. 創(chuàng)建隊(duì)列Queue
        /*
        queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> arguments)
        參數(shù):
            1. queue:隊(duì)列名稱(chēng)
            2. durable:是否持久化,當(dāng)mq重啟之后,還在
            3. exclusive:
                * 是否獨(dú)占。只能有一個(gè)消費(fèi)者監(jiān)聽(tīng)這隊(duì)列
                * 當(dāng)Connection關(guān)閉時(shí),是否刪除隊(duì)列
                *
            4. autoDelete:是否自動(dòng)刪除。當(dāng)沒(méi)有Consumer時(shí),自動(dòng)刪除掉
            5. arguments:參數(shù)。

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

        /*
        basicConsume(String queue, boolean autoAck, Consumer callback)
        參數(shù):
            1. queue:隊(duì)列名稱(chēng)
            2. autoAck:是否自動(dòng)確認(rèn)
            3. callback:回調(diào)對(duì)象

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

                1. consumerTag:標(biāo)識(shí)
                2. envelope:獲取一些信息,交換機(jī),路由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)閉資源?不要,因?yàn)橐恢北O(jiān)聽(tīng)消息
    }
}

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

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

相關(guān)文章

  • 淺析JavaWeb項(xiàng)目架構(gòu)之Redis分布式日志隊(duì)列

    淺析JavaWeb項(xiàng)目架構(gòu)之Redis分布式日志隊(duì)列

    架構(gòu)、分布式、日志隊(duì)列,標(biāo)題自己都看著唬人,其實(shí)就是一個(gè)日志收集的功能,只不過(guò)中間加了一個(gè)Redis做消息隊(duì)列罷了。下面通過(guò)本文給大家分享JavaWeb項(xiàng)目架構(gòu)之Redis分布式日志隊(duì)列,感興趣的朋友一起看看吧
    2018-01-01
  • java可變參數(shù)使用示例

    java可變參數(shù)使用示例

    這篇文章主要介紹了java可變參數(shù)使用示例,需要的朋友可以參考下
    2014-04-04
  • Windows下Java調(diào)用可執(zhí)行文件代碼實(shí)例

    Windows下Java調(diào)用可執(zhí)行文件代碼實(shí)例

    這篇文章主要介紹了Windows下Java調(diào)用可執(zhí)行文件代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • 如何通過(guò)自定義spring?invalidator注解校驗(yàn)數(shù)據(jù)合法性

    如何通過(guò)自定義spring?invalidator注解校驗(yàn)數(shù)據(jù)合法性

    這篇文章主要介紹了如何通過(guò)自定義spring?invalidator注解校驗(yàn)數(shù)據(jù)合法性,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • SpringBoot整合ShardingSphere的示例代碼

    SpringBoot整合ShardingSphere的示例代碼

    本文主要介紹了SpringBoot整合ShardingSphere的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Mybatis日期格式自動(dòng)轉(zhuǎn)換需要用到的兩個(gè)注解說(shuō)明

    Mybatis日期格式自動(dòng)轉(zhuǎn)換需要用到的兩個(gè)注解說(shuō)明

    這篇文章主要介紹了Mybatis日期格式自動(dòng)轉(zhuǎn)換需要用到的兩個(gè)注解說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java 數(shù)據(jù)庫(kù)連接池 Tomcat介紹

    Java 數(shù)據(jù)庫(kù)連接池 Tomcat介紹

    這篇文章主要給大家分享了 Java 數(shù)據(jù)庫(kù)連接池 Tomcat介紹,omcat 是一個(gè)小型的輕量級(jí)應(yīng)用服務(wù)器,在中小型系統(tǒng)和并發(fā)訪問(wèn)用戶(hù)不是很多的場(chǎng)合下被普遍使用,是開(kāi)發(fā)和調(diào)試JSP 程序的首選。下面來(lái)看看文章內(nèi)容的詳細(xì)介紹吧
    2021-11-11
  • 解決idea中yml文件不識(shí)別的問(wèn)題

    解決idea中yml文件不識(shí)別的問(wèn)題

    這篇文章主要介紹了解決idea中yml文件不識(shí)別的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • 關(guān)于Java整合RocketMQ實(shí)現(xiàn)生產(chǎn)消費(fèi)詳解

    關(guān)于Java整合RocketMQ實(shí)現(xiàn)生產(chǎn)消費(fèi)詳解

    這篇文章主要介紹了關(guān)于Java整合RocketMQ實(shí)現(xiàn)生產(chǎn)消費(fèi)詳解,RocketMQ作為一款純java、分布式、隊(duì)列模型的開(kāi)源消息中間件,支持事務(wù)消息、順序消息、批量消息、定時(shí)消息、消息回溯等,需要的朋友可以參考下
    2023-05-05
  • Java實(shí)現(xiàn)的矩陣乘法示例

    Java實(shí)現(xiàn)的矩陣乘法示例

    這篇文章主要介紹了Java實(shí)現(xiàn)的矩陣乘法,簡(jiǎn)單描述了矩陣乘法的原理,并結(jié)合實(shí)例形式分析了java實(shí)現(xiàn)矩陣乘法的相關(guān)操作技巧,需要的朋友可以參考下
    2019-03-03

最新評(píng)論