1. 程式人生 > >學習RabbitMQ(五)

學習RabbitMQ(五)

訊息中介軟體就是在訊息的傳輸過程中儲存訊息的容器。訊息中介軟體再將訊息從它的源中繼到它的目標時充當中間人的作用。佇列的主要目的是提供路由並保證訊息的傳遞;如果傳送訊息時接收者不可用,訊息佇列會保留訊息,直到可以成功的傳遞它為止,當然,訊息佇列儲存訊息也是有期限點的。

一、訊息中介軟體特點:

1.1、採用非同步處理模式

訊息傳送者可以傳送一個訊息而無須等待響應。訊息傳送者將訊息傳送到一條虛擬的通道(主題或佇列)上,訊息接受者則訂閱或是監聽該通道。一條訊息可能最終轉發給一個或多個訊息接受者,這些接受者都無須對訊息傳送者做出同步迴應。整個過程是非同步的。比如使用者訊息註冊,註冊完畢後過段時間傳送郵件或者短息

1.2、應用程式和應用程式呼叫關係為鬆耦合關係

傳送者和接受者不必瞭解對方、只需要確認訊息

傳送者和接受者不必同時線上

比如線上交易系統為了保證資料的最終一致,在支付系統處理完成後會把支付結果放到訊息中介軟體裡通過訂單系統修改訂單支付狀態。兩個系統通過 訊息中介軟體解耦

二、訊息傳遞服務模型:

2.1、訊息中介軟體的傳遞模型:

image.png

2.1.1、點對點模型(PTP)

點對點模型用於訊息生產者和訊息消費者之間點對點的通訊。訊息生產者將訊息發動到由某個名字標識的特定消費者。這個名字實際上對應於訊息服務中的一個佇列(Queue),在訊息傳送給消費者之前它被儲存在這個佇列中。佇列訊息可以放在記憶體中也可以是持久的,以保證在訊息服務出現故障時扔然能夠傳遞訊息

image.png

點對點模型特點:

(1)、每個訊息只用一個消費者

(2)、傳送者和接受者沒有時間依賴

(3)、接受者確認訊息接受和處理成功

2.1.2、釋出-訂閱模型(Pub/Sub)

釋出者/訂閱者模型支援向一個特定的訊息主題生產訊息。0或多個訂閱者可能對接收來自特定訊息主題的訊息感興趣。在這種模型下,釋出者和訂閱者彼此不知道對方。這種模式好比是匿名公告板。

這種模式被概括為:多個消費者可以獲得訊息。在釋出者和訂閱者之間存在時間依賴性。釋出者需要建立一個訂閱(subscription),以便能夠消費者訂閱。訂閱者必須保持持續的活動狀態以接受訊息,除非訂閱者建立了持久的訂閱。在這種情況下,在訂閱者未連線時釋出的訊息將在訂閱者重新連線時重新發布。

image.png

釋出/訂閱模型特性:

(1)、每個訊息可以有多個訂閱者

(2)、客戶端只有訂閱後才能接收到訊息

(3)、持久訂閱和非持久訂閱

釋出/訂閱模型特點:

(1)、釋出者和訂閱者有時間依賴

接收者和釋出者只有建立訂閱關係才能收到訊息

(2)、持久訂閱

訂閱關係建立後,訊息就不會消失,不管訂閱者是否都線上

(3)、非持久訂閱

訂閱者為了接收訊息、必須一直線上,當只有一個訂閱者時約等於點對點模式

2.2、訊息中介軟體分類:

2.2.1(push)推訊息模型:訊息生產者將訊息傳送給訊息傳遞服務,訊息傳遞服務又將訊息推送給訊息消費者。

2.2.2(pull)拉訊息模型:消費者請求訊息服務接收訊息,訊息生產者從訊息中介軟體拉該訊息。

 

Metaq

Rabbitmq是一個在AMQP協議標準基礎上完整的,可複用的企業訊息系統。採用Erlang實現的工業級的訊息佇列(MQ)伺服器。

AMQP(高階訊息佇列協議)是一個非同步訊息傳遞所使用的應用層協議規範,作為線路層協議,而不是API(例如JMS)AMQP客戶端能夠無視訊息的來源任意傳送和接收資訊。AMQP的原始用途只是為金融界提供一個可以彼此協作的訊息協議,而現在的目標則是為通用訊息佇列架構提供通用構建工具。因此,面向訊息的中介軟體(MOM)系統,例如釋出/訂閱佇列,沒有作為基本元素實現。反而通過傳送簡化的AMQ實體,使用者被賦予了構建例如這些實體的能力。這些實體也是規範的一部分,形成了線上路層協議頂端的一個層級:AMQP模型。這個模型統一了訊息模式,諸如之前提到的釋出/訂閱,佇列,事務以及流資料,並且添加了額外的特性,例如更易於擴充套件,基於內容的路由。

image.png

image.png

安裝Rabbitmq:

[[email protected] ~]# wget http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm

[[email protected] ~]# rpm -ivh epel-release-6-8.noarch.rpm

[[email protected] ~]# yum install -y rabbitmq-server

[[email protected] ~]# /etc/init.d/rabbitmq-server start

[[email protected] ~]# chkconfig rabbitmq-server on

[[email protected] ~]# /usr/lib/rabbitmq/bin/rabbitmq-plugins list  ##列出所有的外掛

[[email protected] ~]# /usr/lib/rabbitmq/bin/rabbitmq-plugins enable rabbitmq_management ##啟用web監控外掛

The following plugins have been enabled:

  mochiweb

  webmachine

  rabbitmq_web_dispatch

  amqp_client

  rabbitmq_management_agent

  rabbitmq_management

Plugin configuration has changed. Restart RabbitMQ for changes to take effect.

[[email protected] ~]# /etc/init.d/rabbitmq-server restart

Restarting rabbitmq-server: SUCCESS

rabbitmq-server.

[[email protected] ~]# netstat -lntup|grep 5672

tcp        0      0 0.0.0.0:15672   0.0.0.0:*      LISTEN      2939/beam.smp       

tcp        0      0 0.0.0.0:55672   0.0.0.0:*      LISTEN      2939/beam.smp       

tcp        0      0 :::5672       :::*         LISTEN      2939/beam.smp       

[[email protected] ~]# rabbitmqctl add_vhost test ##建立vhosttest 

Creating vhost "test" ...

...done.

[[email protected] ~]# rabbitmqctl list_vhosts   ##遍歷所有虛擬主機資訊

Listing vhosts ...

/

test

...done.

[[email protected] ~]# rabbitmqctl add_user test 123456   ##新增使用者及密碼

Creating user "test" ...

...done.

[[email protected] ~]# rabbitmqctl set_user_tags test administrator  ##設定使用者test的角色

Setting tags for user "test" to [administrator] ...

...done.

[[email protected] ~]#rabbitmqctl set_permissions -p test test ".*" ".*" ".*" ##繫結許可權,並且具備讀寫的許可權

Setting permissions for user "test" in vhost "test" ...

...done.

[[email protected] ~]# rabbitmqctl list_queues  ##顯示所有佇列

Listing queues ...

...done.

[[email protected] ~]# /etc/init.d/rabbitmq-server restart   ##一定要restart

Restarting rabbitmq-server: SUCCESS

rabbitmq-server.

 

常用命令:

/etc/init.d/rabbitmq-server start|restart|stop|reload

rabbitmqctl add_vhost vhostname  建立vhost

rabbitmqctl delete_vhost vhostname 刪除vhost

rabbitmqctl list_vhosts   遍歷所有虛擬主機資訊

rabbitmqctl add_user username password  新增使用者及密碼

rabbitmqctl change_password username newpassword 修改使用者密碼

rabbitmqctl set_user_tags username administrator 設定username的角色(administrator)

rabbitmqctl set_permissions -p vhost user ".*" ".*" ".*"  繫結許可權,並且具備讀寫的許可權

rabbitmqctl list_queues  顯示所有佇列

注:不管能否解決你遇到的問題,歡迎相互交流,共同提高!

###############################################################################################

1.訊息中介軟體簡介

訊息中介軟體是在訊息的傳輸過程中儲存訊息的容器。訊息中介軟體在將訊息從它的源中繼到它的目標時充當中間人的作用。佇列的主要目的是提供路由並保證訊息的傳遞,如果傳送訊息時接受者不可用,訊息佇列會保留訊息,知道可以成功傳遞它為止,當然,訊息佇列保持訊息也是有期限的。

2.訊息中介軟體特點

 - 採用非同步處理模式

    訊息傳送者可以傳送一個訊息而無須等待響應。訊息傳送者將訊息傳送到一條虛擬的通道(主題或佇列

上,訊息接受者則訂閱或是監聽通道。

   - 應用程式和應用程式呼叫關係為鬆耦合關係

    傳送者和接受者不必瞭解對方、只需要確認訊息

    傳送者和接受者不必同時線上

3.訊息傳遞服務模型

4.訊息佇列的作用

解耦,非同步,緩衝,收集,佇列,儲存

5.訊息中介軟體的傳遞模型

 - 點對點模型(PTP)

    每個訊息只用一個消費者

    傳送者和接受者沒有時間依賴

    接受者確認訊息接受和處理成功

 - 釋出-訂閱模型(Pub/Sub)

 每個訊息可以有多個訂閱者

 客戶端只有訂閱後才能接收訊息

 持久訂閱和非持久訂閱

6.釋出-訂閱模型特點

  - 釋出者和訂閱者有時間依賴:接受者和釋出者只有建立訂閱關係才能收到訊息

  - 持久訂閱:訂閱關係建立後,訊息就不會消失,不管訂閱者是否都線上

  - 非持久訂閱:訂閱者為了接受訊息,必須一直線上,當只有一個訂閱時約等於點對點模式

 7. 網際網路訊息中介軟體應用場景

     1.網站使用者註冊,註冊成功後會傳送郵件確認或簡訊(非同步)

        填寫註冊資訊--使用者註冊服務--訊息中介軟體--郵件服務|簡訊服務

     2.日誌進行集中收集,用於計算PV,使用者行為分析

        應用服務|應用服務|--訊息中介軟體--pv分析服務|行為分析服務

     3.資料複製

        將資料從源頭複製到多個目的地,一般是要求順序或者保證因果序列

        用於跨機房資料傳輸、搜尋、離線資料計算

        DB--DB Sync--Broker--Search|hadoop|DB

      4. 延遲訊息釋出和暫存

        把訊息中介軟體當成可靠的訊息暫存地

        定時進行訊息投遞,比如模擬使用者秒殺訪問,進行系統性能壓測

     5.訊息廣播

        快取資料同步更新

        往應用推送資料

8.訊息中介軟體分類

  1.推訊息模型(push):訊息生產者將訊息傳送給訊息傳遞服務,訊息傳遞服務又將訊息推給消費者--場景:交易,註冊

  2.拉訊息模型(pull):消費者請求訊息服務接受訊息,訊息生產者從訊息中間拉該訊息--場景:行為分析,PV計算

 

9.metaq訊息中介軟體(pull)

metaq是一款完全的佇列模型訊息中介軟體,伺服器使用java語言編寫,可在多種軟硬體平臺上部署。客戶端支援java/c++程式語言。單臺伺服器可支援1萬以上各訊息佇列,通過擴容伺服器,佇列數幾乎可任意橫向擴充套件。每個佇列都是持久化,長度無限(取決於磁碟空間大小),並且可從佇列任意位置開始消費

官網:http://metaq.taobao.org

10.metaq特點

    1.生產者、伺服器和消費者都可分散式

    2.訊息儲存順序讀寫

    3.效能極高,吞吐量大

    4.支援訊息順序

    5.客戶端pull,隨機讀,批量拉資料

    6.資料遷移,擴容對使用者透明

    7.消費狀態儲存在客戶端

11.rabbitMQ

是一個在AMQP協議標準基礎上完整的,採用Erlang實現的工業級的訊息佇列MQ伺服器

12.rabbitMQ架構--執行原理

13.rabbitMQ重要術語

   1.sever(broker):接受客戶端連線,實現AMQP訊息佇列路由功能的程序

   2.Virtual Host:其實是一個虛擬概念,類似於許可權控制組,一個Virtual Host裡面可以有若干個Exchange 和Quece,但是許可權控制的最小粒度是Virtual Host

   3.Exchang:接受生產者傳送的訊息,並根據Binding規則江訊息路由給伺服器中的佇列,Exchange Type 決定了Exchange路由訊息的行為,例如:在Rabbitmq中,

        Exchange Type有direct ,fanout和topic三種,不用型別的exchange路由的行為是不一樣的

   4.Message Queue:訊息佇列,用於儲存還未被消費者消費的訊息

   5.Message:由Header和Body組成,Header是由生產者新增的各種屬性的集合,包括Message是否被持久化,由那個Message Queue接受,優先順序是多少等,而Body是真正需要傳輸的APP資料

   6.Binding key:所謂繫結就是將一個特定的exchange 和一個特定的queue繫結起來,繫結關鍵字為bindinkey

14.rabbitMQ常用配置介紹

    一般情況下,rabbitMQ的預設配置就足夠了,如果希望特殊配置的話,有2個途徑

   1.環境變數的配置檔案rabbitmq-env.conf

   2.配置資訊的配置檔案rabbitmq.config

注意,這2個檔案預設是沒有的,如果需要必須自己建立

   1.rabbitmq-env.conf這個檔案的位置是確定和不能改變的,位於:/etc/rabbitmq目錄下,這個目錄需要自己建立

 
1 2 3 4 rabbitmq_node_ip_address:指定ip地址 rabbitmq_node_port:指定埠號,more5672 rabbitmq_config_file:配置檔案的路徑,注意配置檔案字尾必須是.config rabbitmq_log_base:日誌檔案路徑

    2.rabbitmq.config這是一個標準的erlang配置檔案,它必須符合erlang配置檔案的標準。erlangtuple,結構為{key,value},key為atm型別,value為一個term,其中關鍵引數為:

 
1 2 3 1.tcp_listerners設定rabbimq的監聽埠,預設為5672 2.disk_free_limit磁碟低水位線,鄀磁碟容量低於指定值則停止接收資料 3.vm_memory_high_watemark,設定記憶體低水位線,若低於該水位線,則開啟流控機制,預設值是0.4,即記憶體總量的40% 

15.rabbitMQ安裝

 
1 2 3 4 5 6 7 8 9 10 11 12 13 wget http: //mirrors .ustc.edu.cn /fedora/epel/6/x86_64/epel-release-6-8 .noarch.rpm rpm -ivh epel-release-6-8.noarch.rpm yum install rebbitmq-server -y /usr/lib/rabbitmq/bin/rabbitmq-plugins list /usr/lib/rabbitmq/bin/rabbitmq-plugins enable rabbitmq_management /etc/init .d /rabbitmq-server start   rabbitmqctl add_vhost test      # 建立vhost rabbitmqctl delete_vhost test   # 刪除vhost rabbitmqctl list_vhosts         # 遍歷所有虛擬主機資訊 rabbitmqctl add_user test test      # 新增使用者及密碼 rabbitmqctl set_permissions -p test test test ".*" ".*" ".*"    # 繫結許可權,並且具備讀寫的許可權 rabbitmqctl list_queues -p test # 顯示所有佇列

  

 

#######################################################################################

 
 
   

[[email protected] ~]# cat /etc/redhat-release
CentOS release 6.8 (Final)
[[email protected] ~]# uname -r
2.6.32-642.el6.x86_64

#基礎環境配置hostname
sed -i "2c HOSTNAME=rabbitmq" /etc/sysconfig/network
hostname rabbitmq

#sysctl
cat >> /etc/sysctl.conf <<EOF
net.ipv4.tcp_fin_timeout = 5
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
EOF
sysctl -p

#設定連線數最大值
echo '* - nofile 65535' >>/etc/security/limits.conf
ulimit -SHn 65535

#selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0
getenforce

#chkconfig
export LANG=en
for zsq in `chkconfig --list|grep "3:on"|awk '{print $1}'|grep -vE "crond|network|rsyslog|sshd"`
do
chkconfig $zsq off
done
/etc/init.d/iptables stop

#date 
yum -y install ntpdate
\cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

echo "#time sync by zsq at $(date +%F)" >> /var/spool/cron/root
echo "*/10 * * * * /usr/sbin/ntpdate 10.10.88.1 &>/dev/null" >>/var/spool/cron/root


#Install rabbitmq
yum install wget vim -y
cd /usr/local/src/

wget http://www.rabbitmq.com/releases/erlang/erlang-18.3.4.4-1.el6.x86_64.rpm
rpm -ivh erlang-18.3.4.4-1.el6.x86_64.rpm

wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-8.noarch.rpm
#安裝出錯可以替換下YUM連結
# sed -i -e '3 s/^#//' /etc/yum.repos.d/epel.repo
# sed -i -e '4 s/^/#/' /etc/yum.repos.d/epel.repo
yum install socat -y

wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.6/rabbitmq-server-3.6.6-1.el6.noarch.rpm
rpm -ivh rabbitmq-server-3.6.6-1.el6.noarch.rpm 

cd /etc/rabbitmq  
cp /usr/share/doc/rabbitmq-server-3.6.6/rabbitmq.config.example /etc/rabbitmq/
 
mv rabbitmq.config.example rabbitmq.config 
touch rabbitmq-env.conf
cat >> rabbitmq-env.conf << eof
RABBITMQ_LOG_BASE=/home/rabbitmq/log
eof
mkdir /home/rabbitmq/log -p
chown rabbitmq.rabbitmq -R /home/rabbitmq
/etc/init.d/rabbitmq-server start
chkconfig rabbitmq-server on

#Add user
rabbitmqctl add_user admin admin #建立使用者
rabbitmqctl set_user_tags admin administrator
rabbitmq-plugins enable rabbitmq_management  #開啟管理介面

#rabbitmq.config檔案
sed -i '64 d' rabbitmq.config 
sed '63 a   {loopback_users, []},' -i  rabbitmq.config 
sed '218 a{vm_memory_high_watermark, 0.9}' -i  rabbitmq.config  #記憶體設定

#rabbitmq資料是根據當前hostname作為node節點作為資料名儲存、重啟會丟失使用者資訊
echo '[email protected]' | sudo tee -a /etc/rabbitmq/rabbitmq-env.conf 
echo '127.0.0.1 q' | sudo tee -a /etc/hosts
檢視rabbitmq的資料儲存路徑 cat /var/lib/rabbitmq/mnesia/
service rabbitmq
-server restart 其它命令: rabbitmqctl list_users #檢視使用者資訊 rabbitmqctl list_queues #顯示佇列 rabbitmqctl change_password API API123.. #修改使用者API密碼 rabbitmq配置 一般情況下,RabbitMQ的預設配置就足夠了。如果希望特殊設定的話,有兩個途徑: 一個是環境變數的配置檔案 /etc/rabbitmq/rabbitmq-env.conf ; 一個是配置資訊的配置檔案 /etc/rabbitmq/rabbitmq.conf; 注意,這兩個檔案預設是沒有的,如果需要必須自己建立。 管理web介面登陸 在瀏覽器中輸入http://127.0.0.1:15672/ 輸入使用者名稱和密碼(預設為guest)
 

 

1.訊息中介軟體簡介

訊息中介軟體是在訊息的傳輸過程中儲存訊息的容器。訊息中介軟體在將訊息從它的源中繼到它的目標時充當中間人的作用。佇列的主要目的是提供路由並保證訊息的傳遞,如果傳送訊息時接受者不可用,訊息佇列會保留訊息,知道可以成功傳遞它為止,當然,訊息佇列保持訊息也是有期限的。

2.訊息中介軟體特點

 - 採用非同步處理模式

    訊息傳送者可以傳送一個訊息而無須等待響應。訊息傳送者將訊息傳送到一條虛擬的通道(主題或佇列

上,訊息接受者則訂閱或是監聽通道。

   - 應用程式和應用程式呼叫關係為鬆耦合關係

    傳送者和接受者不必瞭解對方、只需要確認訊息

    傳送者和接受者不必同時線上

3.訊息傳遞服務模型

4.訊息佇列的作用

解耦,非同步,緩衝,收集,佇列,儲存

5.訊息中介軟體的傳遞模型

 - 點對點模型(PTP)

    每個訊息只用一個消費者

    傳送者和接受者沒有時間依賴

    接受者確認訊息接受和處理成功

 - 釋出-訂閱模型(Pub/Sub)

 每個訊息可以有多個訂閱者

 客戶端只有訂閱後才能接收訊息

 持久訂閱和非持久訂閱

6.釋出-訂閱模型特點

  - 釋出者和訂閱者有時間依賴:接受者和釋出者只有建立訂閱關係才能收到訊息

  - 持久訂閱:訂閱關係建立後,訊息就不會消失,不管訂閱者是否都線上

  - 非持久訂閱:訂閱者為了接受訊息,必須一直線上,當只有一個訂閱時約等於點對點模式

 7. 網際網路訊息中介軟體應用場景

     1.網站使用者註冊,註冊成功後會傳送郵件確認或簡訊(非同步)

        填寫註冊資訊--使用者註冊服務--訊息中介軟體--郵件服務|簡訊服務

     2.日誌進行集中收集,用於計算PV,使用者行為分析

        應用服務|應用服務|--訊息中介軟體--pv分析服務|行為分析服務

     3.資料複製

        將資料從源頭複製到多個目的地,一般是要求順序或者保證因果序列

        用於跨機房資料傳輸、搜尋、離線資料計算

        DB--DB Sync--Broker--Search|hadoop|DB

      4. 延遲訊息釋出和暫存

        把訊息中介軟體當成可靠的訊息暫存地

        定時進行訊息投遞,比如模擬使用者秒殺訪問,進行系統性能壓測

     5.訊息廣播

        快取資料同步更新

        往應用推送資料

8.訊息中介軟體分類

  1.推訊息模型(push):訊息生產者將訊息傳送給訊息傳遞服務,訊息傳遞服務又將訊息推給消費者--場景:交易,註冊

  2.拉訊息模型(pull):消費者請求訊息服務接受訊息,訊息生產者從訊息中間拉該訊息--場景:行為分析,PV計算

 

9.metaq訊息中介軟體(pull)

metaq是一款完全的佇列模型訊息中介軟體,伺服器使用java語言編寫,可在多種軟硬體平臺上部署。客戶端支援java/c++程式語言。單臺伺服器可支援1萬以上各訊息佇列,通過擴容伺服器,佇列數幾乎可任意橫向擴充套件。每個佇列都是持久化,長度無限(取決於磁碟空間大小),並且可從佇列任意位置開始消費

官網:http://metaq.taobao.org

10.metaq特點

    1.生產者、伺服器和消費者都可分散式

    2.訊息儲存順序讀寫

    3.效能極高,吞吐量大

    4.支援訊息順序

    5.客戶端pull,隨機讀,批量拉資料

    6.資料遷移,擴容對使用者透明

    7.消費狀態儲存在客戶端

11.rabbitMQ

是一個在AMQP協議標準基礎上完整的,採用Erlang實現的工業級的訊息佇列MQ伺服器

12.rabbitMQ架構--執行原理

13.rabbitMQ重要術語

   1.sever(broker):接受客戶端連線,實現AMQP訊息佇列路由功能的程序

   2.Virtual Host:其實是一個虛擬概念,類似於許可權控制組,一個Virtual Host裡面可以有若干個Exchange 和Quece,但是許可權控制的最小粒度是Virtual Host

   3.Exchang:接受生產者傳送的訊息,並根據Binding規則江訊息路由給伺服器中的佇列,Exchange Type 決定了Exchange路由訊息的行為,例如:在Rabbitmq中,

        Exchange Type有direct ,fanout和topic三種,不用型別的exchange路由的行為是不一樣的

   4.Message Queue:訊息佇列,用於儲存還未被消費者消費的訊息

   5.Message:由Header和Body組成,Header是由生產者新增的各種屬性的集合,包括Message是否被持久化,由那個Message Queue接受,優先順序是多少等,而Body是真正需要傳輸的APP資料

   6.Binding key:所謂繫結就是將一個特定的exchange 和一個特定的queue繫結起來,繫結關鍵字為bindinkey

14.rabbitMQ常用配置介紹

    一般情況下,rabbitMQ的預設配置就足夠了,如果希望特殊配置的話,有2個途徑

   1.環境變數的配置檔案rabbitmq-env.conf

   2.配置資訊的配置檔案rabbitmq.config

注意,這2個檔案預設是沒有的,如果需要必須自己建立

   1.rabbitmq-env.conf這個檔案的位置是確定和不能改變的,位於:/etc/rabbitmq目錄下,這個目錄需要自己建立

 
1 2 3 4 rabbitmq_node_ip_address:指定ip地址 rabbitmq_node_port:指定埠號,more5672 rabbitmq_config_file:配置檔案的路徑,注意配置檔案字尾必須是.config rabbitmq_log_base:日誌檔案路徑

    2.rabbitmq.config這是一個標準的erlang配置檔案,它必須符合erlang配置檔案的標準。erlangtuple,結構為{key,value},key為atm型別,value為一個term,其中關鍵引數為:

 
1 2 3 1.tcp_listerners設定rabbimq的監聽埠,預設為5672 2.disk_free_limit磁碟低水位線,鄀磁碟容量低於指定值則停止接收資料 3.vm_memory_high_watemark,設定記憶體低水位線,若低於該水位線,則開啟流控機制,預設值是0.4,即記憶體總量的40% 

15.rabbitMQ安裝

 
1 2 3 4 5 6 7 8 9 10 11 12 13 wget http: //mirrors .ustc.edu.cn /fedora/epel/6/x86_64/epel-release-6-8 .noarch.rpm rpm -ivh epel-release-6-8.noarch.rpm yum install rebbitmq-server -y /usr/lib/rabbitmq/bin/rabbitmq-plugins list /usr/lib/rabbitmq/bin/rabbitmq-plugins enable rabbitmq_management /etc/init .d /rabbitmq-server start   rabbitmqctl add_vhost test      # 建立vhost rabbitmqctl delete_vhost test   # 刪除vhost rabbitmqctl list_vhosts         # 遍歷所有虛擬主機資訊 rabbitmqctl add_user test test      # 新增使用者及密碼 rabbitmqctl set_permissions -p test test test ".*" ".*" ".*"    # 繫結許可權,並且具備讀寫的許可權 rabbitmqctl list_queues -p test # 顯示所有佇列

  

 

 
 
 

[[email protected] ~]# cat /etc/redhat-release
CentOS release 6.8 (Final)
[[email protected] ~]# uname -r
2.6.32-642.el6.x86_64

#基礎環境配置hostname
sed -i "2c HOSTNAME=rabbitmq" /etc/sysconfig/network
hostname rabbitmq

#sysctl
cat >> /etc/sysctl.conf <<EOF
net.ipv4.tcp_fin_timeout = 5
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
EOF
sysctl -p

#設定連線數最大值
echo '* - nofile 65535' >>/etc/security/limits.conf
ulimit -SHn 65535

#selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0
getenforce

#chkconfig
export LANG=en
for zsq in `chkconfig --list|grep "3:on"|awk '{print $1}'|grep -vE "crond|network|rsyslog|sshd"`
do
chkconfig $zsq off
done
/etc/init.d/iptables stop

#date 
yum -y install ntpdate
\cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

echo "#time sync by zsq at $(date +%F)" >> /var/spool/cron/root
echo "*/10 * * * * /usr/sbin/ntpdate 10.10.88.1 &>/dev/null" >>/var/spool/cron/root


#Install rabbitmq
yum install wget vim -y
cd /usr/local/src/

wget http://www.rabbitmq.com/releases/erlang/erlang-18.3.4.4-1.el6.x86_64.rpm
rpm -ivh erlang-18.3.4.4-1.el6.x86_64.rpm

wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-8.noarch.rpm
#安裝出錯可以替換下YUM連結
# sed -i -e '3 s/^#//' /etc/yum.repos.d/epel.repo
# sed -i -e '4 s/^/#/' /etc/yum.repos.d/epel.repo
yum install socat -y

wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.6/rabbitmq-server-3.6.6-1.el6.noarch.rpm
rpm -ivh rabbitmq-server-3.6.6-1.el6.noarch.rpm 

cd /etc/rabbitmq  
cp /usr/share/doc/rabbitmq-server-3.6.6/rabbitmq.config.example /etc/rabbitmq/
 
mv rabbitmq.config.example rabbitmq.config 
touch rabbitmq-env.conf
cat >> rabbitmq-env.conf << eof
RABBITMQ_LOG_BASE=/home/rabbitmq/log
eof
mkdir /home/rabbitmq/log -p
chown rabbitmq.rabbitmq -R /home/rabbitmq
/etc/init.d/rabbitmq-server start
chkconfig rabbitmq-server on

#Add user
rabbitmqctl add_user admin admin #建立使用者
rabbitmqctl set_user_tags admin administrator
rabbitmq-plugins enable rabbitmq_management  #開啟管理介面

#rabbitmq.config檔案
sed -i '64 d' rabbitmq.config 
sed '63 a   {loopback_users, []},' -i  rabbitmq.config 
sed '218 a{vm_memory_high_watermark, 0.9}' -i  rabbitmq.config  #記憶體設定

#rabbitmq資料是根據當前hostname作為node節點作為資料名儲存、重啟會丟失使用者資訊
echo '[email protected]' | sudo tee -a /etc/rabbitmq/rabbitmq-env.conf 
echo '127.0.0.1 q' | sudo tee -a /etc/hosts
檢視rabbitmq的資料儲存路徑 cat /var/lib/rabbitmq/mnesia/
service rabbitmq
-server restart 其它命令: rabbitmqctl list_users #檢視使用者資訊 rabbitmqctl list_queues #顯示佇列 rabbitmqctl change_password API API123.. #修改使用者API密碼 rabbitmq配置 一般情況下,RabbitMQ的預設配置就足夠了。如果希望特殊設定的話,有兩個途徑: 一個是環境變數的配置檔案 /etc/rabbitmq/rabbitmq-env.conf ; 一個是配置資訊的配置檔案 /etc/rabbitmq/rabbitmq.conf; 注意,這兩個檔案預設是沒有的,如果需要必須自己建立。 管理web介面登陸 在瀏覽器中輸入http://127.0.0.1:15672/ 輸入使用者名稱和密碼(預設為guest)