1. 程式人生 > >二、RabbitMQ安裝

二、RabbitMQ安裝

RabbitMQ安裝

RabbitMQ是由Erlang語言編寫的,因此在使用RabbitMQ之前需要安裝Erlang,本次安裝Erlang_19.3版本

1、安裝Erlang

  1. 下載Erlang19.3版本,官網下載為otp_src_19.3.tar.gz

    [[email protected] ~]$ ls
    otp_src_19.3.tar.gz
  2. 解壓otp_src_19.3.tar.gz到當前目錄

    [[email protected] ~]$ tar -xvf otp_src_19.3.tar.gz
  3. 進入解壓目錄,配置安裝目錄為/usr/local/erlang

    ,如果不需要java編譯器編譯,可以新增--without-javac選項。

    [[email protected] ~]$ cd otp_src_19.3
    [[email protected] otp_src_19.3]$ sudo ./configure --prefix=/usr/local/erlang

    在這一步中如果出現類似

    No curses library functions found

    的錯誤,此時就需要安裝ncurses(出現提示輸入y後回車安裝)

    [[email protected] otp_src_19.3]$ sudo yum install ncurses-devel

    上面安裝完後,再執行第3步配置目錄,如果還出現如下錯誤

    crypto         : No usable OpenSSL found
    odbc           : ODBC library - link check failed
    ssh            : No usable OpenSSL found
    ssl            : No usable OpenSSL found

    可以執行安裝相應缺失的包

    1. 安裝OpenSSL

      • 查詢yum源中含有的ssl

        [[email protected] otp_src_19.3]$ yum list | grep ssl
        openssl-devel.i686                          1:1.0.2k-12.el7            base
        openssl-devel.x86_64                        1:1.0.2k-12.el7            base
      • 執行安裝openssl-devel

        [[email protected] otp_src_19.3]$ sudo yum install openssl-devel
    2. 安裝ODBC

      • 查詢yum源中含有的ODBC

        [[email protected] otp_src_19.3]$ yum list | grep ODBC
        unixODBC-devel.i686                         2.3.1-11.el7               base
        unixODBC-devel.x86_64                       2.3.1-11.el7               base
      • 執行安裝unixODBC-devel

        [[email protected] otp_src_19.3]$ sudo yum install unixODBC-devel

    安裝完後,重新執行配置目錄

    [[email protected] otp_src_19.3]$ sudo ./configure --prefix=/opt/erlang
  4. 安裝Erlang

    執行如下命令編譯安裝

    [[email protected] otp_src_19.3]$ sudo make
    [[email protected] otp_src_19.3]$ sudo make install

    配置環境變數

    [[email protected] otp_src_19.3]$ sudo vim /etc/profile

    /etc/profile中寫入如下內容

    # Erlang
    ERLANG_HOME=/usr/local/erlang
    export PATH=$PATH:${ERLANG_HOME}/bin
    export ERLANG_HOME

    啟動Erlang shell

    [[email protected] otp_src_19.3]$ erl
    Erlang/OTP 19 [erts-8.3] [source] [64-bit] [async-threads:10] [hipe] [kernel-poll:false]
    Eshell V8.3  (abort with ^G)
    1> 

    啟動成功,退出Erlang shell

    1> halt().

2、安裝RabbitMQ

  1. 下載RabbitMQ3.6.14版本,官網下載為rabbitmq-server-generic-unix-3.6.14.tar.xz

    [[email protected] ~]$ ls
    rabbitmq-server-generic-unix-3.6.14.tar.xz
  2. 解壓rabbitmq-server-generic-unix-3.6.14.tar.xz/opt目錄

    [[email protected] ~]$ sudo tar -xvf rabbitmq-server-generic-unix-3.6.14.tar.xz -C /usr/local
  3. 修改解壓的目錄rabbitmq_server-3.6.14rabbitmq

    [[email protected] ~]$ cd /usr/local
    [[email protected] local]$ sudo mv rabbitmq_server-3.6.14 rabbitmq
  4. 修改rabbitmq目錄及目錄使用者組和使用者為hayson

    [[email protected] local]$ sudo chgrp -R hayson rabbitmq
    [[email protected] local]$ sudo chown -R hayson rabbitmq
  5. 配置環境變數

    [[email protected] local]$ sudo vim /etc/profile

    寫入如下內容

    RABBITMQ_HOME=/usr/local/rabbitmq
    export PATH=$PATH:${RABBITMQ_HOME}/sbin
    export RABBITMQ_HOME
  6. 啟動rabbitmq

    [[email protected] local]$ cd rabbitmq
    [[email protected] rabbitmq]$ rabbitmq-server
                  RabbitMQ 3.6.14. Copyright (C) 2007-2017 Pivotal Software, Inc.
      ##  ##      Licensed under the MPL.  See http://www.rabbitmq.com/
      ##  ##
      ##########  Logs: /opt/rabbitmq/var/log/rabbitmq/[email protected]
      ######  ##        /opt/rabbitmq/var/log/rabbitmq/[email protected]
      ##########
                  Starting broker...
     completed with 0 plugins.

    輸出如上資訊,RabbitMQ啟動成功。

    上面是以當前Shell視窗執行並列印資訊,一旦關閉終端後便停止執行,不推薦使用該命令執行。所以在rabbitmq-server命令後面新增一個引數-detached

    [[email protected] rabbitmq]$ rabbitmq-server -detached

    可以讓RabbitMQ以守護程序方式在後臺執行,不會因為當前Shell視窗的關閉而停止執行。

  7. 檢視RabbitMQ啟動狀態

    • 通過rabbitmqctl status

      [[email protected] rabbitmq]$ rabbitmqctl status

      如果RabbitMQ正常啟動,無輸出紅色錯誤資訊。

    • 通過rabbitmqctl cluster_status

      [[email protected] rabbitmq]$ rabbitmqctl cluster_status
      Cluster status of node [email protected]
      [{nodes,[{disc,[[email protected]]}]},
       {running_nodes,[[email protected]]},
       {cluster_name,<<"[email protected]">>},
       {partitions,[]},
       {alarms,[{[email protected],[]}]}]

      以上通過檢視叢集資訊來檢視RabbitMQ是否啟動成功。以上目前只有一個RabbitMQ服務節點,可以看作單節點的叢集

    • 通過埠檢視

      [[email protected] rabbitmq]$ lsof -i:5672
      COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
      beam    89238 hayson   51u  IPv6 197613      0t0  TCP *:amqp (LISTEN)

      RabbitMQ預設埠為5672,通過檢視該埠可以檢視到*:amqp(LISTEN)在監聽狀態

    • 通過ps命令

      [[email protected] rabbitmq]$ ps -ef | grep rabbitmq
       hayson   102312      1  0 11月13 ?      00:03:37 /usr/local/erlang/lib/erlang/erts-8.3/bin/beam -W w -A 64 -P 1048576 -t 5000000 -stbt db -zdbbl 128000 -K true -- -root /usr/local/erlang/lib/erlang -progname erl -- -home /home/hayson -- -pa /usr/local/rabbitmq/ebin -noshell -noinput -s rabbit boot -sname [email protected] -boot start_sasl -config /usr/local/rabbitmq/etc/rabbitmq/rabbitmq -kernel inet_default_connect_options [{nodelay,true}] -sasl errlog_type error -sasl sasl_error_logger false -rabbit error_logger {file,"/usr/local/rabbitmq/var/log/rabbitmq/[email protected]"} -rabbit sasl_error_logger {file,"/usr/local/rabbitmq/var/log/rabbitmq/[email protected]"} -rabbit enabled_plugins_file "/usr/local/rabbitmq/etc/rabbitmq/enabled_plugins" -rabbit plugins_dir "/usr/local/rabbitmq/plugins" -rabbit plugins_expand_dir "/usr/local/rabbitmq/var/lib/rabbitmq/mnesia/[email protected]" -os_mon start_cpu_sup false -os_mon start_disksup false -os_mon start_memsup false -mnesia dir "/usr/local/rabbitm /var/lib/rabbitmq/mnesia/[email protected]" -kernel inet_dist_listen_min 25672 -kernel inet_dist_listen_max 25672 -noshell -noinput
      

      啟動成功,輸出rabbitmq相關資訊,未啟動無資訊。

  8. 開啟webui介面管理

    預設情況下,安裝RabbitMQ並啟動成功,並不會開啟任何外掛

    [[email protected] rabbitmq]$ rabbitmq-server
                  RabbitMQ 3.6.14. Copyright (C) 2007-2017 Pivotal Software, Inc.
      ##  ##      Licensed under the MPL.  See http://www.rabbitmq.com/
      ##  ##
      ##########  Logs: /opt/rabbitmq/var/log/rabbitmq/[email protected]
      ######  ##        /opt/rabbitmq/var/log/rabbitmq/[email protected]
      ##########
                  Starting broker...
     completed with 0 plugins.

    如果需要通過瀏覽器訪問RabbitMQ管理介面,要開啟rabbitmq_management外掛

    1. 檢視RabbitMQ所有外掛

      [[email protected] ~]$ rabbitmq-plugins list -v
       Configured: E = explicitly enabled; e = implicitly enabled
       | Status:   * = running on [email protected]
       |/
      [  ] rabbitmq_management
           Version:           3.6.14
           Dependencies:      [amqp_client,cowboy,cowlib,rabbitmq_web_dispatch,
                               rabbitmq_management_agent]
           Description:       RabbitMQ Management Console

      可以看到rabbitmq_management就是RabbitMQ的web管理外掛,還需要同時開啟其他的5個外掛。

    2. 開啟rabbitmq_management外掛

      [[email protected] ~]$ rabbitmq-plugins enable rabbitmq_management
      The following plugins have been enabled:
        amqp_client
        cowlib
        cowboy
        rabbitmq_web_dispatch
        rabbitmq_management_agent
        rabbitmq_management
      Applying plugin configuration to [email protected] started 6 plugins.

      共開啟了6個外掛。檢視外掛列表,前面出現e*標記表示開啟

      [[email protected] ~]$ rabbitmq-plugins list
       Configured: E = explicitly enabled; e = implicitly enabled
       | Status:   * = running on [email protected]
       |/
      [e*] amqp_client                       3.6.14
      [e*] cowboy                            1.0.4
      [e*] cowlib                            1.0.2
      [  ] rabbitmq_consistent_hash_exchange 3.6.14
      [  ] rabbitmq_event_exchange           3.6.14
      [  ] rabbitmq_federation               3.6.14
      [E*] rabbitmq_management               3.6.14
      [e*] rabbitmq_management_agent         3.6.14
      [e*] rabbitmq_web_dispatch             3.6.14
    3. 重啟rabbitmq,通過rabbitmqctl status可以看到http服務開啟,佔用埠15672,並且通過檢視啟動狀態和埠15672看到監聽狀態。

      [[email protected] ~]$ rabbitmqctl shutdown
      [[email protected] ~]$ rabbitmq-server -detached
      [[email protected] ~]$ rabbitmqctl status | grep listeners
      {listeners,[{clustering,25672,"::"},{amqp,5672,"::"},{http,15672,"::"}]},
      
      [[email protected] sbin]$ lsof -i:15672
      COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
      beam    89238 hayson   52u  IPv4 197670      0t0  TCP *:15672 (LISTEN)
    4. 配置防火牆埠以便外網瀏覽器訪問

      [[email protected] ~]$ sudo firewall-cmd --zone=public --add-port=15672/tcp --permanent
      success
      [[email protected] ~]$ sudo firewall-cmd --reload
      success
    5. 使用者登入webui管理介面

      • 預設使用者guest登入

        預設情況下,訪問RabbitMQ服務的使用者名稱和密碼都是guest,這個賬戶有限制,預設只能通過本地網路(如localhost)訪問,遠端網路訪問受限,可以通過配置檔案rabbitmq.config進行配置外網訪問

        [[email protected] ~]$ cd /usr/local/rabbitmq/etc/rabbitmq
        [[email protected] rabbitmq]$ vim rabbitmq.config 

        寫入如下內容

        [
            {rabbit, [{loopback_users,[]}]}
        ].

        儲存後,重啟RabbitMQ,可以在外網瀏覽器通過預設使用者guest登入。

      • 建立使用者登入

        預設情況下,訪問RabbitMQ服務的使用者名稱和密碼都是guest,這個賬戶有限制,預設只能通過本地網路(如localhost)訪問,遠端網路訪問受限,通過配置可以設定外網訪問,但不推薦。所以需要另外建立一個使用者

        1. 建立使用者

          [[email protected] rabbitmq]$ rabbitmqctl add_user admin admin
          Creating user "admin"
        2. 為使用者設定許可權

          設定使用者admin訪問名為“/(所有)”的虛擬主機,並對所有.*(正則)的資源具有配置許可權,並對所有資源執行寫入.*(正則)和讀取.*(正則)許可權資源:

          [[email protected] rabbitmq]$ rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
          Setting permissions for user "admin" in vhost "/"
        3. 設定使用者為管理員角色

          [[email protected] rabbitmq]$ rabbitmqctl set_user_tags admin administrator
          Setting tags for user "admin" to [administrator]
        4. 檢視RabbitMQ使用者

          [[email protected] rabbitmq]$ rabbitmqctl list_users
          Listing users
          admin   [administrator]
          guest   [administrator]

          可以看到使用者admin為管理員許可權

    6. 外網瀏覽器開啟並輸入使用者名稱和密碼登入,進入管理頁面

3、本節RabbitMQ相關命令

# 啟動rabbitmq,在當前Shell視窗開啟並列印資訊,關閉視窗後停止執行,不推薦使用
rabbitmq-server
# 啟動rabbitmq,以守護程序方式在後臺執行,不會因為當前Shell視窗的關閉而停止執行。
rabbitmq-server -detached
# 關閉rabbitmq
rabbitmqctl shutdown
# 檢視所有外掛,後面加 -v 顯示詳細資訊
rabbitmq-plugins list
# 開啟外掛,後面加外掛名
rabbitmq-plugins enable pluginName
# 關閉外掛
rabbitmq-plugins disable pluginName
# 檢視rabbitmqctl所有命令
rabbitmqctl
# rabbitmq啟動狀態
rabbitmqctl status
# 建立rabbitmq使用者名稱和密碼
rabbitmqctl add_user username password
# 設定使用者admin訪問名為“/(所有)”的虛擬主機,並對所有.*(正則)的資源具有配置許可權,並對所有資源執行寫入.*(正則)和讀取.*(正則)許可權資源:
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
# 設定使用者為管理員角色
rabbitmqctl set_user_tags admin administrator
# 檢視rabbitmq所有使用者
rabbitmqctl list_users