本文翻譯自RabbitMQ官網。
1、RabbitMQ的介紹
使用消息隊列的一個主要的目的是解決數據消費速度和生產速度不一致的問題。
Rabbit MQ是衆多消息代理中的一種。本質上,它負責從生產者接收到消息,然後將消息發送給消費者。在這個過程中,它可以根據你的選擇對消息傳遞進行路由、緩存消息或者是持久化消息。先來看一些術語:
(1)生產者即爲發送者,發送消息的程序即爲生產者,這裏簡稱爲P;
(2)隊列:隊列駐存在RabbitMQ中,消息可以在RabbitMq和應用之間流動,但最終消息是存儲在隊列中的。本質上,隊列是一個有無限容量的buffer,可以存儲儘可能多的消息,生產者可以將消息發送到一個隊列,消費者也可以從一個隊列中取消息。這裏稱隊列爲queue_name;
(3)消費者即爲接收者,一般是等待着接收消息的應用。這裏簡稱爲C;
2、安裝與配置
下載erlang OTP 18.3 Windows 64-bit Binary File:https://www.erlang.org/downlowds
下載rabbitmq_server-3.6.1 :https://www.rabbitmq.com/download.html
啓動server,如下:
在maven中配置需要依賴的RabbitMQ客戶端:
然後就可以開發RabbitMQ的demo了。
3、一個簡單的demo
這個demo實現的功能很簡單:
(1)有一個生產者,向消息隊列中發送消息,消息爲:“hello rabbit”;
(2)有一個消息隊列,隊列名稱爲:“hello”;
(3)有一個消費者,從消息隊列中取消息,並打印出具體消息,如圖所示。
實現:
(1)生產者:
首先創建連接工廠(ConnectionFactory),這裏使用spring框架自動注入,如下所示:
這裏還添加了幾個屬性。
然後創建連接(Connection):
然後創建通道(Channel):
創建消息隊列(Queue):
其中:
queue -- 隊列的名稱
durable -- 隊列的持久屬性,在RabbitMQ重啓後隊列會不會丟失
exclusive -- 隊列的排他屬性,如果爲true,則爲創建該隊列的消費者私有
autoDelete -- 隊列的自動刪除屬性,在消費者斷開連接的時候,隊列是否會刪除
然後生產者就可以發佈消息了:
(2)消費者:
消費者的前期配置基本與生產者相同,注意隊列的名稱和屬性要一致。
注意有一個onBussiness方法,這就是在接收到消息之後,要做的處理工作。
(3)結果
先運行生產者,後運行消費者,消費端結果如下:
消費成功。