成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

RabbitMQ使用教程(一)RabbitMQ環(huán)境安裝配置及Hello World示例

SegmentFault / 1183人閱讀

摘要:進行插入操作的端稱為隊尾,進行刪除操作的端稱為對頭。還有個專業(yè)術語要了解下生產(chǎn)者發(fā)送消息的應用程序被稱為生產(chǎn)者。消費者接收消息的應用程序被稱為消費者。參考鏈接下安裝及操作常用命令譯實戰(zhàn)教程一

你是否聽說過或者使用過隊列?

你是否聽說過或者使用過消息隊列?

你是否聽說過或者使用過RabbitMQ?

提到這幾個詞,用過的人,也許覺得很簡單,沒用過的人,也許覺得很復雜,至少在我沒使用消息隊列之前,聽別人提到消息隊列,都感覺很復雜,很高深。

好了,言歸正傳,本篇博客我們就講解下什么是消息隊列,RabbitMQ環(huán)境的安裝配置,最后通過一個Hello World示例了解下RabbitMQ的使用方法。

1.基本概念講解 1.1隊列(Queue)

隊列是常用的數(shù)據(jù)結構之一,是一種特殊的線性表,特殊之處在于它只允許在表的前端(front)進行刪除操作,而在表的后端(rear)進行插入操作。

進行插入操作的端稱為隊尾,進行刪除操作的端稱為對頭。

在Java中,java.util包下已經(jīng)有隊列的相關實現(xiàn),我們可以直接使用。

1.2消息隊列(Message Queue)

消息是計算機/應用間傳送的數(shù)據(jù)單位,可以非常簡單,例如只包含文本字符串,也可以很復雜,可能包含嵌入對象。

消息隊列是在消息的傳輸過程中保存消息的容器。

消息傳輸時,先發(fā)送到隊列,隊列的主要目的是提供路由并保證消息的傳遞,如果發(fā)送消息時接收者不可用,消息隊列會保留消息,直到可以成功的傳遞它。

可以把消息隊列理解成快遞公司,你需要寄一個物件(消息)給你的朋友,快遞公司收到物件會保證物件送到你的朋友手中,可能存在多次寄送才送達成功的情況,比如第一次送過去,你朋友不在家。

也許有人好奇,為什么我們不直接使用JDK自帶的隊列,而是要使用消息隊列呢?

這是因為JDK自帶的隊列都存儲在內(nèi)存中,一但應用或者服務器掛了,消息就丟失了,使用消息隊列可以避免消息丟失問題(注意不是100%不丟失),就像快遞公司會保證你的物件寄到你的朋友手中,但肯定有丟件的幾率。

1.3RabbitMQ

RabbitMQ是用Erlang語言開發(fā)的基于高級消息隊列協(xié)議(AMQP)的消息隊列中間件。

因為它開源,而且版本更新快,所以在國內(nèi)互聯(lián)網(wǎng)公司被廣泛使用。

其它使用的消息中間件還有ActiveMQ,RocketMQ,Kafka等,有興趣的同學可以自行研究。

還有2個專業(yè)術語要了解下:

生產(chǎn)者:發(fā)送消息的應用程序被稱為生產(chǎn)者。

消費者:接收消息的應用程序被稱為消費者。

2.RabbitMQ安裝及配置

了解完基本概念,讓我們在本機上安裝下RabbitMQ,因為它是基于Erlang語言開發(fā)的,所以我們要先安裝Erlang。

2.1Erlang安裝及配置

Erlang下載地址:www.erlang.org/downloads

因為我的電腦是Windows 64位系統(tǒng),所以我下載的是64位的,系統(tǒng)是32位的同學注意下版本。

安裝過程比較簡單,以下為部分截圖:

安裝完成后,需要新建個環(huán)境變量(打開方式:計算機--右鍵--屬性--高級系統(tǒng)設置--高級--環(huán)境變量):

ERLANG_HOME E:Program Fileserl10.4(修改為你的安裝路徑)

2.2RabbitMQ安裝及配置

RabbitMQ下載地址:www.rabbitmq.com/install-win…

安裝過程也比較簡單,以下為部分截圖:

安裝完成后,在cmd窗口中執(zhí)行以下命令激活RabbitMQ Manage Plugin

"E:Program FilesRabbitMQ Server
abbitmq_server-3.7.15sbin
abbitmq-plugins.bat" enable rabbitmq_management

然后執(zhí)行命令重啟RabbitMQ服務:

net stop RabbitMQ && net start RabbitMQ

如果你的cmd窗口不是以管理員身份打開的,會出現(xiàn)如下報錯信息

解決方法也很簡單,以管理員身份打開cmd窗口執(zhí)行命令即可

關于這一步,可以不使用命令重啟RabbitMQ服務,而是打開Windows的服務列表,找到RabbitMQ服務,重啟即可。

到這一步,RabbitMQ的安裝就算完成了,其中有幾個默認值,我們要知曉下:

默認的端口號:5672

默認的用戶是guest guest

管理后臺的默認端口號:15672

瀏覽器輸入http://localhost:15672/,我們可以看到RabbitMQ的管理后臺,然后使用默認的guest賬號登錄,在這個后臺,可以完成新建用戶,配置用戶角色,新建隊列等操作,當然,如果有的同學比較喜歡命令行操作,也都有相對應的命令來完成操作,關于這些內(nèi)容,后續(xù)多帶帶再寫博客講解。

3.Hello World示例

既然RabbitMQ環(huán)境安裝好了,那么我們通過1個簡單的示例來看下效果。

首先在pom文件中,添加依賴:

<dependency>
   <groupId>com.rabbitmqgroupId>
   <artifactId>amqp-clientartifactId>
   <version>5.7.0version>
dependency>

然后新建一個生產(chǎn)者類(Producer),用來新建一個隊列"hello",然后往隊列里發(fā)送消息‘Hello World’:

package com.zwwhnly.springbootaction.rabbitmq.helloworld;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class Producer {
    private final static String QUEUE_NAME = "hello";

    public static void main(String[] args) throws IOException, TimeoutException {
        // 創(chuàng)建連接
        ConnectionFactory factory = new ConnectionFactory();
        // 設置 RabbitMQ 的主機名
        factory.setHost("localhost");
        // 創(chuàng)建一個連接
        Connection connection = factory.newConnection();
        // 創(chuàng)建一個通道
        Channel channel = connection.createChannel();
        // 指定一個隊列,不存在的話自動創(chuàng)建
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        // 發(fā)送消息
        String message = "Hello World!";
        channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
        System.out.println(" [x] Sent "" + message + """);
        // 關閉頻道和連接
        channel.close();
        connection.close();
    }
}

運行代碼,在RabbitMQ管理后臺,會看到隊列新建成功,并且有1個消息待消費:

最后我們新建一個消費者類(Consumer),用來消費這個消息:

package com.zwwhnly.springbootaction.rabbitmq.helloworld;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class Consumer {
    private final static String QUEUE_NAME = "hello";

    public static void main(String[] args) throws IOException, TimeoutException {
        // 創(chuàng)建連接
        ConnectionFactory factory = new ConnectionFactory();
        // 設置 RabbitMQ 的主機名
        factory.setHost("localhost");
        // 創(chuàng)建一個連接
        Connection connection = factory.newConnection();
        // 創(chuàng)建一個通道
        Channel channel = connection.createChannel();
        // 指定一個隊列
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        // 創(chuàng)建隊列消費者
        com.rabbitmq.client.Consumer consumer = new DefaultConsumer(channel) {
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope,
                                       AMQP.BasicProperties properties, byte[] body) throws IOException {
                String message = new String(body, "UTF-8");
                System.out.println("Received Message "" + message + """);
            }
        };
        channel.basicConsume(QUEUE_NAME, true, consumer);
    }
}

運行代碼,我們會發(fā)現(xiàn)控制臺輸出:

Received Message "Hello World!"

此時再看下RabbitMQ管理后臺,會發(fā)現(xiàn)隊列"hello"待消費的消息為0:

是不是覺得挺簡單的呢,趕緊在本機安裝試試吧!

4.源碼

源碼地址:github.com/zwwhnly/spr…,歡迎下載。

5.參考鏈接

windows下 安裝 rabbitMQ 及操作常用命令

【譯】RabbitMQ 實戰(zhàn)教程(一) Hello World!

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://m.hztianpu.com/yun/7184.html

相關文章

  • RabbitMQ 基礎教程(1) - Hello World

    摘要:基礎教程注本文是對眾多博客的學習和總結,可能存在理解錯誤。請帶著懷疑的眼光,同時如果有錯誤希望能指出。安裝庫這里我們首先將消息推入隊列,然后消費者從隊列中去除消息進行消費。 RabbitMQ 基礎教程(1) - Hello World 注:本文是對眾多博客的學習和總結,可能存在理解錯誤。請帶著懷疑的眼光,同時如果有錯誤希望能指出。 如果你喜歡我的文章,可以關注我的私人博客:http:...

    wushuiyong 評論0 收藏0
  • RabbitMQ+PHP 教程二(Work Queues)

    摘要:平均每個消費者將得到相同數(shù)量的消息。消息確認完成任務可能需要幾秒鐘。為了確保消息不會丟失,支持消息確認。沒有任何消息超時當這個消費者中止了,將會重新分配消息時。這是因為只是調(diào)度消息時,消息進入隊列。 showImg(https://segmentfault.com/img/bVXNuN?w=332&h=111); 介紹 在上一個 Hello World 教程中,我們編寫了從指定隊列發(fā)送...

    iKcamp 評論0 收藏0
  • RabbitMQ+PHP 教程Hello World

    摘要:在中間的框是一個隊列的消息緩沖區(qū),保持代表的消費。本教程介紹,這是一個開放的通用的協(xié)議消息。我們將在本教程中使用,解決依賴管理。發(fā)送者將連接到,發(fā)送一條消息,然后退出。注意,這與發(fā)送發(fā)布的隊列匹配。 介紹 RabbitMQ是一個消息代理器:它接受和轉發(fā)消息。你可以把它當作一個郵局:當你把郵件放在信箱里時,你可以肯定郵差先生最終會把郵件送到你的收件人那里。在這個比喻中,RabbitMQ就...

    silencezwm 評論0 收藏0
  • rabbitmq中文教程python版 - 介紹

    摘要:每當我們收到一條消息,這個回調(diào)函數(shù)就被皮卡庫調(diào)用。接下來,我們需要告訴這個特定的回調(diào)函數(shù)應該從我們的隊列接收消息為了讓這個命令成功,我們必須確保我們想要訂閱的隊列存在。生產(chǎn)者計劃將在每次運行后停止歡呼我們能夠通過發(fā)送我們的第一條消息。 源碼:https://github.com/ltoddy/rabbitmq-tutorial 介紹 RabbitMQ是一個消息代理:它接受和轉發(fā)消息。你...

    yimo 評論0 收藏0
  • Spring Cloud Stream 使用延遲消息實現(xiàn)定時任務(RabbitMQ

    摘要:然而實際業(yè)務中還存在另外一種定時任務,它可能需要一些觸發(fā)條件才開始定時,比如編寫博文時候,設置小時之后發(fā)送。在消息監(jiān)聽類中,對通道定義了,這里會對延遲消息做具體的邏輯。由于消息的消費是延遲的,從而變相實現(xiàn)了從消息發(fā)送那一刻起開始的定時任務。 應用場景 我們在使用一些開源調(diào)度系統(tǒng)(比如:elastic-job等)的時候,對于任務的執(zhí)行時間通常都是有規(guī)律性的,可能是每隔半小時執(zhí)行一次,或者...

    honhon 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<