Rabbitmq 相關介紹之單機配置

1、rabbitmq介紹html

一、什麼是MQnode

  MQ全稱爲Message Queue, 消息隊列(MQ)是一種應用程序對應用程序的通訊方法。應用程序經過讀寫出入隊列的消息(針對應用程序的數據)來通訊,而無需專用鏈接來連接它們。消息傳遞指的是程序之間經過在消息中發送數據進行通訊,而不是經過直接調用彼此來通訊,直接調用一般是用於諸如遠程過程調用的技術。排隊指的是應用程序經過 隊列來通訊。隊列的使用除去了接收和發送應用程序同時執行的要求。其中較爲成熟的MQ產品有IBM WEBSPHERE MQ等等。linux

  RabbitMQ是流行的開源消息隊列系統,用erlang語言開發。RabbitMQ是AMQP(高級消息隊列協議)的標準實現。若是不熟悉AMQP,直接看RabbitMQ的文檔會比較困難。他遵循Mozilla Public License開源協議。git

二、MQ的特色github

MQ是消費-生產者模型的一個典型的表明,一端往消息隊列中不斷寫入消息,而另外一端則能夠讀取或者訂閱隊列中的消息。MQ和JMS相似,但不一樣的是JMS是SUN JAVA消息中間件服務的一個標準和API定義,而MQ則是遵循了AMQP協議的具體實現和產品。web

三、使用場景shell

在項目中,將一些無需即時返回且耗時的操做提取出來,進行了異步處理,而這種異步處理的方式大大的節省了服務器的請求響應時間,從而提升了系統的吞吐量。centos

四、RabbitMQ的幾個概念安全

Broker:簡單來講就是消息隊列服務器實體。bash

Exchange:消息交換機,它指定消息按什麼規則,路由到哪一個隊列。

Queue:消息隊列載體,每一個消息都會被投入到一個或多個隊列。

Binding:綁定,它的做用就是把exchange和queue按照路由規則綁定起來。

Routing Key:路由關鍵字,exchange根據這個關鍵字進行消息投遞。

vhost:虛擬主機,一個broker裏能夠開設多個vhost,用做不一樣用戶的權限分離。

producer:消息生產者,就是投遞消息的程序。

consumer:消息消費者,就是接受消息的程序。

channel:消息通道,在客戶端的每一個鏈接裏,可創建多個channel,每一個channel表明一個會話任務。

消息隊列的使用過程大概以下:

(1)客戶端鏈接到消息隊列服務器,打開一個channel。

(2)客戶端聲明一個exchange,並設置相關屬性。

(3)客戶端聲明一個queue,並設置相關屬性。

(4)客戶端使用routing key,在exchange和queue之間創建好綁定關係。

(5)客戶端投遞消息到exchange。

exchange接收到消息後,就根據消息的key和已經設置的binding,進行消息路由,將消息投遞到一個或多個隊列裏。

五、持久化

RabbitMQ支持消息的持久化,也就是數據寫在磁盤上,爲了數據安全考慮,我想大多數用戶都會選擇持久化。消息隊列持久化包括3個部分:

  (1)exchange持久化,在聲明時指定durable => 1

  (2)queue持久化,在聲明時指定durable => 1

  (3)消息持久化,在投遞時指定delivery_mode => 2(1是非持久化)

若是exchange和queue都是持久化的,那麼它們之間的binding也是持久化的。若是exchange和queue二者之間有一個持久化,一個非持久化,就不容許創建綁定。

參考連接:https://baike.baidu.com/item/rabbitmq/9372144?fr=aladdin

2、安裝配置

一、說明
在CentOS 6.x 系統上若是安裝了epel源,那麼使用yum安裝的版本(版本較低)是:
erlang:  erlang-R14B-04.3.el6.x86_64,
rabbitmq: rabbitmq-server-3.1.5-1.el6.noarch
官網提供的erlang源能夠安裝高版本的erlang,地址:官網提供的rabbitmq不一樣版本的rpm包下載地址:
二、這裏使用rpm包安裝
rpm 包下載地址:
rabbimq   http://www.rabbitmq.com/download.html
erlang    http://www.rabbitmq.com/releases/erlang/
下載的版本;
rabbitmq-server-3.6.12-1.el6.noarch.rpm
erlang-19.0.4-1.el6.x86_64.rpm
三、開始安裝
#rpm -ivh erlang-19.0.4-1.el6.x86_64.rpm 
Preparing...                ########################################### [100%]
   1:erlang                 ########################################### [100%]
#rpm -ivh rabbitmq-server-3.6.12-1.el6.noarch.rpm 
warning: rabbitmq-server-3.6.12-1.el6.noarch.rpm: Header V4 RSA/SHA512 Signature, key ID 6026dfca: NOKEY
error: Failed dependencies:
        socat is needed by rabbitmq-server-3.6.12-1.el6.noarch
四、安裝依賴
#yum install socat -y 
安裝的版本:socat-1.7.2.3-1.el6.x86_64.rpm  socat地址:http://www.dest-unreach.org/socat/
注:最新版本是socat-1.7.3.2
而後從新安裝就ok了。
#rpm -ivh  rabbitmq-server-3.6.12-1.el6.noarch.rpm   
五、查看狀態
#service rabbitmq-server status
Status of node rabbit@web2
Error: unable to connect to node rabbit@web2: nodedown

DIAGNOSTICS
===========

attempted to contact: [rabbit@web2]

rabbit@web2:
  * connected to epmd (port 4369) on web2
  * epmd reports: node 'rabbit' not running at all
                  no other nodes on web2
  * suggestion: start the node

current node details:
- node name: 'rabbitmq-cli-62@web2'
- home dir: /var/lib/rabbitmq
- cookie hash: iKf4SylsmaagF3webf7oww==
六、啓動
# service rabbitmq-server start
Starting rabbitmq-server: SUCCESS    #大概須要20s左右
rabbitmq-server.
查看啓動狀況
#netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:25672               0.0.0.0:*                   LISTEN      21602/beam.smp       #進程          
tcp        0      0 0.0.0.0:4369                0.0.0.0:*                   LISTEN      21164/epmd           #
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      3172/sshd           
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1324/master         
tcp        0      0 :::5672                     :::*                        LISTEN      21602/beam.smp       #進程
tcp        0      0 :::4369                     :::*                        LISTEN      21164/epmd           #
tcp        0      0 :::22                       :::*                        LISTEN      3172/sshd            
tcp        0      0 ::1:25                      :::*                        LISTEN      1324/master  
查看進程啓動狀況
# ps aux | grep "rabbit"
rabbitmq  21164  0.0  0.0  10832   452 ?        S    09:54   0:00 /usr/lib64/erlang/erts-8.0.3/bin/epmd -daemon
root      21390  0.0  0.1 108448  1216 pts/0    S    09:55   0:00 /bin/sh /etc/init.d/rabbitmq-server start
root      21392  0.0  0.1 108180  1408 pts/0    S    09:55   0:00 /bin/bash -c ulimit -S -c 0 >/dev/null 2>&1 ; /usr/sbin/rabbitmq-server
root      21394  0.0  0.1 108180  1468 pts/0    S    09:55   0:00 /bin/sh /usr/sbin/rabbitmq-server
root      21412  0.0  0.1 145016  1560 pts/0    S    09:55   0:00 su rabbitmq -s /bin/sh -c /usr/lib/rabbitmq/bin/rabbitmq-server 
rabbitmq  21417  0.0  0.1 106080  1492 ?        Ss   09:55   0:00 /bin/sh /usr/lib/rabbitmq/bin/rabbitmq-server
rabbitmq  21602  3.4  6.3 2809660 63476 ?       Sl   09:55   0:05 /usr/lib64/erlang/erts-8.0.3/bin/beam.smp -W w -A 64 -P 1048576 -t 5000000 -stbt db -zdbbl 128000 -K 
true -B i -- -root /usr/lib64/erlang -progname erl -- -home /var/lib/rabbitmq -- -pa /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.12/ebin -noshell -noinput -s rabbit boot
-sname rabbit@web2 -boot start_sasl -kernel inet_default_connect_options [{nodelay,true}] -sasl errlog_type error -sasl sasl_error_logger false -rabbit error_logger 
{file,"/var/log/rabbitmq/rabbit@web2.log"} -rabbit sasl_error_logger {file,"/var/log/rabbitmq/rabbit@web2-sasl.log"} -rabbit enabled_plugins_file
 "/etc/rabbitmq/enabled_plugins" -rabbit plugins_dir "/usr/lib/rabbitmq/plugins:/usr/lib/rabbitmq/lib/rabbitmq_server-3.6.12/plugins" -rabbit plugins_expand_dir 
 "/var/lib/rabbitmq/mnesia/rabbit@web2-plugins-expand" -os_mon start_cpu_sup false -os_mon start_disksup false -os_mon start_memsup false -mnesia dir 
 "/var/lib/rabbitmq/mnesia/rabbit@web2" -kernel inet_dist_listen_min 25672 -kernel inet_dist_listen_max 25672
rabbitmq  21698  0.2  0.0   4060   492 ?        Ss   09:55   0:00 erl_child_setup 65535
rabbitmq  21738  0.0  0.0  10796   548 ?        Ss   09:55   0:00 inet_gethost 4
rabbitmq  21739  0.0  0.0  17124   816 ?        S    09:55   0:00 inet_gethost 4
##########################################
七、增長用戶
由於默認的guest/guest用戶只能在本地登陸,因此先用命令行建立一個admin/admin123,並讓他成爲管理員。
#rabbitmqctl add_user admin admin123            #建立一個admin用戶
Creating user "admin"
#rabbitmqctl set_user_tags admin administrator  #讓其成爲管理員
Setting tags for user "admin" to [administrator]
# rabbitmqctl set_permissions -p / admin  ".*" ".*" ".*"    #給用戶admin授予默認vhost "/" 上read/write/configure權限
Setting permissions for user "admin" in vhost "/"
八、開啓web管理
#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 rabbit@web2... started 6 plugins.
查看管理界面端口
# netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:25672               0.0.0.0:*                   LISTEN      21602/beam.smp             
tcp        0      0 0.0.0.0:4369                0.0.0.0:*                   LISTEN      21164/epmd          
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      3172/sshd           
tcp        0      0 0.0.0.0:15672               0.0.0.0:*                   LISTEN      21602/beam.smp     #多了一個15672的管理端口 
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1324/master         
tcp        0      0 :::5672                     :::*                        LISTEN      21602/beam.smp      
tcp        0      0 :::4369                     :::*                        LISTEN      21164/epmd          
tcp        0      0 :::22                       :::*                        LISTEN      3172/sshd           
tcp        0      0 ::1:25                      :::*                        LISTEN      1324/master    
進入管理界面
#http://ip:15672    #輸入剛纔建立的admin用戶和密碼登陸便可,登陸成功後以下圖

wKiom1m4zhDyQgvpAACzNe1apQ0119.jpg

九、再次查看rabbitmq的狀態
#service rabbitmq-server status
Status of node rabbit@web2
[{pid,21602},
 {running_applications,
     [{rabbitmq_management,"RabbitMQ Management Console","3.6.12"},
      {rabbitmq_management_agent,"RabbitMQ Management Agent","3.6.12"},
      {rabbitmq_web_dispatch,"RabbitMQ Web Dispatcher","3.6.12"},
      {amqp_client,"RabbitMQ AMQP Client","3.6.12"},
      {cowboy,"Small, fast, modular HTTP server.","1.0.4"},
      {cowlib,"Support library for manipulating Web protocols.","1.0.2"},
      {inets,"INETS  CXC 138 49","6.3.2"},
      {rabbit,"RabbitMQ","3.6.12"},
      {mnesia,"MNESIA  CXC 138 12","4.14"},
      {rabbit_common,
          "Modules shared by rabbitmq-server and rabbitmq-erlang-client",
          "3.6.12"},
      {compiler,"ERTS  CXC 138 10","7.0.1"},
      {syntax_tools,"Syntax tools","2.0"},
      {ranch,"Socket acceptor pool for TCP protocols.","1.3.0"},
      {os_mon,"CPO  CXC 138 46","2.4.1"},
      {xmerl,"XML parser","1.3.11"},
      {ssl,"Erlang/OTP SSL application","8.0.1"},
      {public_key,"Public key infrastructure","1.2"},
      {crypto,"CRYPTO","3.7"},
      {asn1,"The Erlang ASN1 compiler version 4.0.3","4.0.3"},
      {sasl,"SASL  CXC 138 11","3.0"},
      {stdlib,"ERTS  CXC 138 10","3.0.1"},
      {kernel,"ERTS  CXC 138 10","5.0.1"}]},
 {os,{unix,linux}},
 {erlang_version,
     "Erlang/OTP 19 [erts-8.0.3] [source] [64-bit] [smp:2:2] [async-threads:64] [hipe] [kernel-poll:true]\n"},
 {memory,
     [{connection_readers,0},
      {connection_writers,0},
      {connection_channels,0},
      {connection_other,2832},
      {queue_procs,2832},
      {queue_slave_procs,0},
      {plugins,1116208},
      {other_proc,19703672},
      {metrics,193464},
      {mgmt_db,379664},
      {mnesia,61768},
      {other_ets,2322160},
      {binary,451464},
      {msg_index,41368},
      {code,26125918},
      {atom,1033401},
      {other_system,24906497},
      {total,76341248}]},
 {alarms,[]},
 {listeners,[{clustering,25672,"::"},{amqp,5672,"::"},{http,15672,"::"}]},
 {vm_memory_calculation_strategy,rss},
 {vm_memory_high_watermark,0.4},
 {vm_memory_limit,411552972},
 {disk_free_limit,50000000},
 {disk_free,18090979328},
 {file_descriptors,
     [{total_limit,65435},
      {total_used,2},
      {sockets_limit,58889},
      {sockets_used,0}]},
 {processes,[{limit,1048576},{used,325}]},
 {run_queue,0},
 {uptime,5852},
 {kernel,{net_ticktime,60}}]

十、若是是centos7系統,對erlang版本要求也比較高,可使用官網提供的yum源來安裝:

https://github.com/rabbitmq/erlang-rpm

[rabbitmq-erlang]
name=rabbitmq-erlang
baseurl=https://dl.bintray.com/rabbitmq/rpm/erlang/20/el/7
gpgcheck=1
gpgkey=https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
repo_gpgcheck=0
enabled=1
安裝
#yum install erlang -y
#rpm -ivh rabbitmq-server-3.7.5-1.el7.noarch.rpm
#cat /etc/yum.repos.d/rabbitmq-erlang.repo
相關文章
相關標籤/搜索