1. 程式人生 > >:Windows下RabbitMQ安裝及入門

:Windows下RabbitMQ安裝及入門

guest plugins sys def 一個 top new all num

1.Windows下安裝RabbitMQ需要以下幾個步驟

(1):下載erlang,原因在於RabbitMQ服務端代碼是使用並發式語言erlang編寫的,下載地址:http://www.erlang.org/downloads,雙擊.exe文件進行安裝就好,安裝完成之後創建一個名為ERLANG_HOME的環境變量,其值指向erlang的安裝目錄,同時將%ERLANG_HOME%\bin加入到Path中,最後打開命令行,輸入erl,如果出現erlang的版本信息就表示erlang語言環境安裝成功;

技術分享

技術分享

(2):下載RabbitMQ,下載地址:http://www.rabbitmq.com/,同樣雙擊.exe進行安裝就好(這裏需要註意一點,默認的安裝目錄是C:/Program Files/....,這個目錄中是存在空格符的,我們需要改變安裝目錄,貌似RabbitMQ安裝目錄中是不允許有空格的,我之前踩過這個大坑);

(3):安裝RabbitMQ-Plugins,這個相當於是一個管理界面,方便我們在瀏覽器界面查看RabbitMQ各個消息隊列以及exchange的工作情況,安裝方法是:打開命令行cd進入rabbitmq的sbin目錄(我的目錄是:E:\software\rabbitmq\rabbitmq_server-3.6.5\sbin),輸入:rabbitmq-plugins enable rabbitmq_management命令,稍等會會發現出現plugins安裝成功的提示,默認是安裝6個插件,如果你在安裝插件的過程中出現了下面的錯誤:

技術分享

解決方法是:首先在命令行輸入:rabbitmq-service stop,接著輸入rabbitmq-service remove,再接著輸入rabbitmq-service install,接著輸入rabbitmq-service start,最後重新輸入rabbitmq-plugins enable rabbitmq_management試試,我是這樣解決的;

(4):插件安裝完之後,在瀏覽器輸入http://localhost:15672進行驗證,你會看到下面界面,輸入用戶名:guest,密碼:guest你就可以進入管理界面,當然用戶名密碼你都可以變的;

技術分享

2.安裝完RabbitMQ之後,我們先來簡單了解下RabbitMQ中涉及到的幾個概念

producer:消息生產者

consumer:消息消費者

virtual host:虛擬主機,在RabbitMQ中,用戶只能在虛擬主機的層面上進行一些權限設置,比如我可以訪問哪些隊列,我可以處理哪些請求等等;

broker:消息轉發者,也就是我們RabbitMQ服務端充當的功能了,那麽消息是按照什麽規則進行轉發的呢?需要用到下面幾個概念;

exchange:交換機,他是和producer直接進行打交道的,有點類似於路由器的功能,主要就是進行轉發操作的唄,那麽producer到底用哪個exchange進行路由呢?這個取決於routing key(路由鍵),每個消息都有這個鍵,我們也可以自己設定,其實就是一字符串;

queue:消息隊列,用於存放消息,他接收exchange路由過來的消息,我們可以對隊列內容進行持久化操作,那麽queue到底接收那個exchange路由的消息呢?這個時候就要用到binding key(綁定鍵)了,綁定鍵會將隊列和exchange進行綁定,至於綁定方式,RabbitMQ提供了多種方式,大家可以看看鴻洋大神的RabbitMQ博客系列(點擊查看);

以上就是RabbitMQ涉及到的一些概念了,用一張圖表示這些概念之間的關系就是:

技術分享

3.RabbitMQ簡單使用

producer(生產者)端步驟:

(1):創建ConnectionFactory,並且設置一些參數,比如hostname,portNumber等等

(2):利用ConnectionFactory創建一個Connection連接

(3):利用Connection創建一個Channel通道

(4):創建queue並且和Channel進行綁定

(5):創建消息,並且發送到隊列中

註意,在我們當前的例子中,並沒有用到exchange交換機,RabbitMQ默認情況下是會創建一個空字符串名字的exchange的,如果我們沒有創建自己的exchange的話,默認就是使用的這個exchange;

producer端代碼:

[java] view plain copy
  1. public class Sender {
  2. private final static String QUEUE_NAME = "MyQueue";
  3. public static void main(String[] args) {
  4. send();
  5. }
  6. public static void send()
  7. {
  8. ConnectionFactory factory = null;
  9. Connection connection = null;
  10. Channel channel = null;
  11. try {
  12. factory = new ConnectionFactory();
  13. factory.setHost("localhost");
  14. connection = factory.newConnection();
  15. channel = connection.createChannel();
  16. channel.queueDeclare(QUEUE_NAME, false, false, false, null);
  17. String message = "my first message .....";
  18. channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF-8"));
  19. System.out.println("已經發送消息....."+message);
  20. } catch (IOException e) {
  21. e.printStackTrace();
  22. } catch (TimeoutException e) {
  23. e.printStackTrace();
  24. }finally{
  25. try {
  26. //關閉資源
  27. channel.close();
  28. connection.close();
  29. } catch (IOException e) {
  30. e.printStackTrace();
  31. } catch (TimeoutException e) {
  32. e.printStackTrace();
  33. }
  34. }
  35. }
  36. }

consumer(消費者)端步驟:

(1):創建ConnectionFactory,並且設置一些參數,比如hostname,portNumber等等

(2):利用ConnectionFactory創建一個Connection連接

(3):利用Connection創建一個Channel通道

(4):將queue和Channel進行綁定,註意這裏的queue名字要和前面producer創建的queue一致

(5):創建消費者Consumer來接收消息,同時將消費者和queue進行綁定

consumer端代碼:

[java] view plain copy
  1. public class Receiver {
  2. private final static String QUEUE_NAME = "MyQueue";
  3. public static void main(String[] args) {
  4. receive();
  5. }
  6. public static void receive()
  7. {
  8. ConnectionFactory factory = null;
  9. Connection connection = null;
  10. Channel channel = null;
  11. try {
  12. factory = new ConnectionFactory();
  13. factory.setHost("localhost");
  14. connection = factory.newConnection();
  15. channel = connection.createChannel();
  16. channel.queueDeclare(QUEUE_NAME, false, false, false, null);
  17. Consumer consumer = new DefaultConsumer(channel){
  18. @Override
  19. public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties,
  20. byte[] body) throws IOException {
  21. System.out.println("11111111111");
  22. String message = new String(body, "UTF-8");
  23. System.out.println("收到消息....."+message);
  24. }};
  25. channel.basicConsume(QUEUE_NAME, true,consumer);
  26. } catch (IOException e) {
  27. e.printStackTrace();
  28. } catch (TimeoutException e) {
  29. e.printStackTrace();
  30. }finally{
  31. try {
  32. //關閉資源
  33. channel.close();
  34. connection.close();
  35. } catch (IOException e) {
  36. e.printStackTrace();
  37. } catch (TimeoutException e) {
  38. e.printStackTrace();
  39. }
  40. }
  41. }
  42. }

好了,這篇先到這了,下一篇我會簡單介紹點更深入的東西,後續也會對RabbitMQ原生API進行封裝,便於我們自己開發;

:Windows下RabbitMQ安裝及入門