RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

RabbitMQ是什么

科技綠洲 ? 來源:Java技術(shù)指北 ? 作者:Java技術(shù)指北 ? 2023-09-25 14:36 ? 次閱讀

在工作中經(jīng)常會(huì)用到消息隊(duì)列處理各種問題,今天指北君帶領(lǐng)大家來學(xué)一個(gè)很常用到的技術(shù)-RabbitMQ;接下來還會(huì)有關(guān)于RabbitMQ的系列教程,對(duì)你有幫助的話記得關(guān)注哦~

RabbitMQ是什么

隊(duì)列 :一種數(shù)據(jù)結(jié)構(gòu),先進(jìn)先出。

消息隊(duì)列 :簡(jiǎn)單的說就是用來進(jìn)行消息傳輸?shù)年?duì)列。

消息中間件 :簡(jiǎn)單的說就是用來傳輸消息的中間載體,就是將你的信息發(fā)送到接受方,它并不關(guān)心發(fā)送的數(shù)據(jù)是什么。RabbitMQ就是一個(gè)消息中間件。

RabbitMQ的特點(diǎn)

  • 可靠性。支持持久化,傳輸確認(rèn),發(fā)布確認(rèn)等保證了MQ的可靠性。
  • 靈活的分發(fā)消息策略。這應(yīng)該是RabbitMQ的一大特點(diǎn)。在消息進(jìn)入MQ前由Exchange(交換機(jī))進(jìn)行路由消息。分發(fā)消息策略有:簡(jiǎn)單模式、工作隊(duì)列模式、發(fā)布訂閱模式、路由模式、通配符模式。
  • 支持集群。多臺(tái)RabbitMQ服務(wù)器可以組成一個(gè)集群,形成一個(gè)邏輯Broker。
  • 多種協(xié)議。RabbitMQ支持多種消息隊(duì)列協(xié)議,比如 STOMP、MQTT 等等。
  • 支持多種語言客戶端。RabbitMQ幾乎支持所有常用編程語言,包括 Java、.NET、Ruby 等等。
  • 可視化管理界面。RabbitMQ提供了一個(gè)易用的用戶界面,使得用戶可以監(jiān)控和管理消息 Broker。
  • 插件機(jī)制。RabbitMQ提供了許多插件,可以通過插件進(jìn)行擴(kuò)展,也可以編寫自己的插件。

為什么使用消息隊(duì)列

  1. 解耦 ,模塊間的通信使用消息隊(duì)列進(jìn)行,降低模塊之間的耦合度。
  2. 異步 ,模塊A處理完核心業(yè)務(wù)之后,發(fā)消息給模塊B,就可以直接返回給客戶端,提高性能。
  3. 削峰 ,短時(shí)間內(nèi)有大量請(qǐng)求,可以通過消息隊(duì)列來逐個(gè)處理,防止系統(tǒng)宕機(jī)。

Hello World

首先,安裝RabbitMQ,可直接使用docker安裝一個(gè)。

docker 地址:https://hub.docker.com/_/rabbitmq/tags

# 拉取鏡像
docker pull rabbitmq:management

# 啟動(dòng)容器
docker run -id --hostname my-rabbit 
 --name rabbitmq 
 -p 15672:15672 
 -p 5672:5672 
 -e RABBITMQ_DEFAULT_USER=admin 
 -e RABBITMQ_DEFAULT_PASS=admin 
 rabbitmq:management

然后在網(wǎng)頁(yè)訪問:http://服務(wù)器的ip:15672,輸入賬號(hào)密碼。記得開放端口

看到此頁(yè)面代表安裝成功

圖片

準(zhǔn)備就緒,先寫個(gè)Hello World

  1. 導(dǎo)入pom依賴
    < dependency >
         < groupId >org.springframework.boot< /groupId >
         < artifactId >spring-boot-starter-amqp< /artifactId >
    < /dependency >
    
  2. 準(zhǔn)備工具類
    public class ConnectionUtils {
    
        public static Connection getConnection() {
            ConnectionFactory factory = new ConnectionFactory();
            factory.setHost("1.15.88.28");
            factory.setPort(5672);
            factory.setUsername("admin");
            factory.setPassword("admin");
            factory.setVirtualHost("/");
            try {
                return factory.newConnection();
            } catch (IOException | TimeoutException e) {
                e.printStackTrace();
            }
            return null;
        }
    }
    
  3. 生產(chǎn)者
    public class Producer {
        // 聲明隊(duì)列的名字
        private static final String QUEUE_NAME = "queue_helloworld_1";
    
        public static void main(String[] args) throws IOException, TimeoutException {
            // 1. 獲取連接
            Connection connection = ConnectionUtils.getConnection();
            // 2. 創(chuàng)建數(shù)據(jù)傳輸通道
            Channel channel = connection.createChannel();
            // 3. 聲明隊(duì)列
            channel.queueDeclare(QUEUE_NAME, false, false, false, null);
            // 4. 發(fā)送數(shù)據(jù)到隊(duì)列
            channel.basicPublish("", QUEUE_NAME, MessageProperties.PERSISTENT_TEXT_PLAIN, "第一個(gè)隊(duì)列消息...".getBytes());
            // 5. 關(guān)閉通道
            channel.close();
            // 6. 關(guān)閉連接
            connection.close();
        }
    }
    
  4. 消費(fèi)者
    public class Consumer {
        // 聲明隊(duì)列的名字
        private static final String QUEUE_NAME = "queue_helloworld_1";
    
        public static void main(String[] args) throws IOException, TimeoutException {
            // 1. 獲取連接
            Connection connection = ConnectionUtils.getConnection();
            // 2. 創(chuàng)建通道
            Channel channel = connection.createChannel();
            // 3. 聲明隊(duì)列
            channel.queueDeclare(QUEUE_NAME, false, false, false, null);
            // 4. 聲明消費(fèi)者
            DefaultConsumer defaultConsumer = new DefaultConsumer(channel) {
                @Override
                public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                    System.out.println("接收到的消息是:" + new String(body));
                    channel.basicAck(envelope.getDeliveryTag(), false);
                }
            };
            // 5. 綁定消費(fèi)者
            channel.basicConsume(QUEUE_NAME, false, defaultConsumer);
        }
    }
    
  5. 測(cè)試
    1. 先啟動(dòng)消費(fèi)者
    2. 再啟動(dòng)生產(chǎn)者
    3. 可以看到消費(fèi)者的控制臺(tái)打印出 生產(chǎn)者傳遞的消息
      圖片

小結(jié)

本文到這里就結(jié)束了,簡(jiǎn)單介紹了一下RabbitMQ是什么,以及RabbitMQ的安裝;

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 模塊
    +關(guān)注

    關(guān)注

    7

    文章

    2695

    瀏覽量

    47431
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    9123

    瀏覽量

    85324
  • 交換機(jī)
    +關(guān)注

    關(guān)注

    21

    文章

    2637

    瀏覽量

    99529
  • 端口
    +關(guān)注

    關(guān)注

    4

    文章

    963

    瀏覽量

    32051
  • rabbitmq
    +關(guān)注

    關(guān)注

    0

    文章

    17

    瀏覽量

    1026
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    RabbitMQ中的發(fā)布訂閱模型

    上一篇文章中,簡(jiǎn)單的介紹了一下RabbitMQ的work模型。這篇文章來學(xué)習(xí)一下RabbitMQ中的發(fā)布訂閱模型。 發(fā)布訂閱模型(Publish/Subscribe):簡(jiǎn)單的說就是隊(duì)列里面的消息會(huì)被
    的頭像 發(fā)表于 09-25 14:30 ?516次閱讀
    <b class='flag-5'>RabbitMQ</b>中的發(fā)布訂閱模型

    RabbitMQ通信模型中的work模型

    上一篇文章中,簡(jiǎn)單的介紹了一下RabbitMQ,以及安裝和hello world。 有的小伙伴留言說看不懂其中的方法參數(shù),這里先解釋一下幾個(gè)基本的方法參數(shù)。 // 聲明隊(duì)列方法
    的頭像 發(fā)表于 09-25 14:34 ?509次閱讀
    <b class='flag-5'>RabbitMQ</b>通信模型中的work模型

    RabbitMq入門教程

    RabbitMQ是一個(gè)開源的,在AMQP基礎(chǔ)上完整的,可復(fù)用的企業(yè)消息系統(tǒng)。
    的頭像 發(fā)表于 12-04 11:10 ?496次閱讀
    <b class='flag-5'>RabbitMq</b>入門教程

    基于Docker Compose部署RabbitMQ的經(jīng)驗(yàn)分享

    RabbitMQ 是一個(gè)功能強(qiáng)大的開源消息隊(duì)列系統(tǒng),它實(shí)現(xiàn)了高效的消息通信和異步處理。
    的頭像 發(fā)表于 01-03 10:22 ?1920次閱讀
    基于Docker Compose部署<b class='flag-5'>RabbitMQ</b>的經(jīng)驗(yàn)分享

    請(qǐng)問有STM32F4上應(yīng)用RabbitMQ或MQTT的例子嗎?

    ,是需要跑FreeRTOS 或 uCOS 么? 還是裸跑也沒有問題的?3、有沒有前輩能提供一下應(yīng)用MOTT在STM32上的例子;另外,如果我想要用RabbitMQ呢?有沒有參考的例子?
    發(fā)表于 04-03 04:35

    【飛凌嵌入式 RK3399 開發(fā)板性能試用體驗(yàn)】(安裝RabbitMQ消息隊(duì)列服務(wù))

    說明relang安裝成功安裝RabbitMQServer消息隊(duì)列服務(wù)apt-get install rabbitmq-server #安裝成功自動(dòng)啟動(dòng)查看RabbitMQServer安裝狀態(tài)
    發(fā)表于 10-28 17:03

    Rabbitmq與esp-open-rtos集成失敗了怎么解決?

    我嘗試將 Rabbitmq 與 esp-open-rtos 集成,但失敗了。 誰能幫忙?
    發(fā)表于 05-10 11:45

    RabbitMQ-CN RabbitMQ中文文檔

    RabbitMQ_into_Chinese.zip
    發(fā)表于 04-19 10:51 ?0次下載
    <b class='flag-5'>RabbitMQ</b>-CN <b class='flag-5'>RabbitMQ</b>中文文檔

    什么情況下使用RabbitMQ或 Kafka

    如果你問自己是否Apache Kafka比RabbitMQ更好或RabbitMQ是否比Apache Kafka更可靠,我想在這里阻止你。本文將從更廣泛的角度討論這兩種情況。它關(guān)注的是這兩個(gè)系統(tǒng)提供的功能,并將指導(dǎo)您做出正確的決定,決定何時(shí)使用哪個(gè)系統(tǒng)。
    的頭像 發(fā)表于 02-22 10:35 ?568次閱讀
    什么情況下使用<b class='flag-5'>RabbitMQ</b>或 Kafka

    什么情況下使用RabbitMQ或 Kafka

    如果你問自己是否Apache Kafka比RabbitMQ更好或RabbitMQ是否比Apache Kafka更可靠,我想在這里阻止你。本文將從更廣泛的角度討論這兩種情況。它關(guān)注的是這兩個(gè)系統(tǒng)提供的功能,并將指導(dǎo)您做出正確的決定,決定何時(shí)使用哪個(gè)系統(tǒng)。
    的頭像 發(fā)表于 02-24 11:12 ?596次閱讀
    什么情況下使用<b class='flag-5'>RabbitMQ</b>或 Kafka

    RabbitMQ:消息傳遞的中介

    電子發(fā)燒友網(wǎng)站提供《RabbitMQ:消息傳遞的中介.zip》資料免費(fèi)下載
    發(fā)表于 06-14 16:08 ?0次下載
    <b class='flag-5'>RabbitMQ</b>:消息傳遞的中介

    rabbitmq是什么?rabbitmq安裝、原理、部署

    rabbitmq是什么? MQ的全稱是Messagee Queue,因?yàn)橄⒌年?duì)列是隊(duì)列,所以遵循FIFO 先進(jìn)先出的原則是上下游傳遞信息的跨過程通信機(jī)制。 RabbitMQ是一套開源(MPL
    的頭像 發(fā)表于 07-19 13:50 ?1030次閱讀

    RocketMQ和RabbitMQ的區(qū)別

    RocketMQ和RabbitMQ的區(qū)別: 架構(gòu)設(shè)計(jì):RocketMQ是基于主題(Topic)的發(fā)布/訂閱模式,而RabbitMQ則是基于隊(duì)列(Queue)的消息代理系統(tǒng)。 語言支持
    的頭像 發(fā)表于 07-24 13:39 ?1.4w次閱讀

    RabbitMQ中的路由模型(direct)

    路由模型 RabbitMQ 提供了五種不同的通信模型,上一篇文章中,簡(jiǎn)單的介紹了一下RabbitMQ的發(fā)布訂閱模型模型。這篇文章來學(xué)習(xí)一下RabbitMQ中的路由模型(direct)。 路由模型
    的頭像 發(fā)表于 09-25 11:32 ?494次閱讀

    redis和rabbitMQ的區(qū)別

    Redis和RabbitMQ是兩個(gè)流行的開源消息傳遞技術(shù),用于構(gòu)建高可靠、可擴(kuò)展和可擴(kuò)展的應(yīng)用程序。雖然它們都用于實(shí)現(xiàn)消息傳遞機(jī)制,但它們?cè)谠O(shè)計(jì)和運(yùn)作方式上存在一些不同之處。在本文中,我們將詳細(xì)討論
    的頭像 發(fā)表于 12-04 14:48 ?1389次閱讀
    RM新时代网站-首页