天天看點

: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語言環境安裝成功;

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

   (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個插件,如果你在安裝插件的過程中出現了下面的錯誤:        

:Windows下RabbitMQ安裝及入門

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

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

:Windows下RabbitMQ安裝及入門

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

    producer:消息生産者

    consumer:消息消費者

     virtual host:虛拟主機,在RabbitMQ中,使用者隻能在虛拟主機的層面上進行一些權限設定,比如我可以通路哪些隊列,我可以處理哪些請求等等;

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

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

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

:Windows下RabbitMQ安裝及入門

3.RabbitMQ簡單使用

   producer(生産者)端步驟:

    (1):建立ConnectionFactory,并且設定一些參數,比如hostname,portNumber等等

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

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

    (4):建立queue并且和Channel進行綁定

    (5):建立消息,并且發送到隊列中

     注意,在我們目前的例子中,并沒有用到exchange交換機,RabbitMQ預設情況下是會建立一個空字元串名字的exchange的,如果我們沒有建立自己的exchange的話,預設就是使用的這個exchange;

     producer端代碼:

public class Sender {  

    private final static String QUEUE_NAME = "MyQueue";  

    public static void main(String[] args) {  

        send();  

    }  

    public static void send()  

    {  

        ConnectionFactory factory = null;  

        Connection connection = null;  

        Channel channel = null;  

        try {  

            factory = new ConnectionFactory();  

            factory.setHost("localhost");  

            connection = factory.newConnection();  

            channel = connection.createChannel();  

            channel.queueDeclare(QUEUE_NAME, false, false, false, null);  

            String message = "my first message .....";  

            channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF-8"));  

            System.out.println("已經發送消息....."+message);  

        } catch (IOException e) {  

            e.printStackTrace();  

        } catch (TimeoutException e) {  

        }finally{  

            try {  

                //關閉資源  

                channel.close();  

                connection.close();  

            } catch (IOException e) {  

                e.printStackTrace();  

            } catch (TimeoutException e) {  

            }  

        }  

}  

     consumer(消費者)端步驟:

     (1):建立ConnectionFactory,并且設定一些參數,比如hostname,portNumber等等

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

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

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

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

     consumer端代碼:

public class Receiver {  

        receive();  

    public static void receive()  

            Consumer consumer = new DefaultConsumer(channel){  

                @Override  

                public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties,  

                        byte[] body) throws IOException {  

                    System.out.println("11111111111");  

                    String message = new String(body, "UTF-8");  

                    System.out.println("收到消息....."+message);  

                }};  

            channel.basicConsume(QUEUE_NAME, true,consumer);  

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