RabbitMQ系列:Windows下RabbitMQ安裝及入門

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安裝目錄中是不容許有空格的,我以前踩過這個大坑);ide

 

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


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

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

 


 

2.安裝完RabbitMQ以後,咱們先來簡單瞭解下RabbitMQ中涉及到的幾個概念
命令行

 

    producer:消息生產者3d

    consumer:消息消費者code

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

    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端代碼:

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

 

 

     consumer(消費者)端步驟:

     (1):建立ConnectionFactory,而且設置一些參數,好比hostname,portNumber等等

     (2):利用ConnectionFactory建立一個Connection鏈接

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

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

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

 

     consumer端代碼:

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