中間件RabbitMQ之運維篇

1、RabbtMQ簡介

       RabbitMQ的官方站: http:/://www.rabbitmq.com/
       rabbitMQ是一個在AMQP協議標準基礎上完整的,可服用的企業消息系統。他遵循Mozila Public License開源協議。採用Erlang實現的工業級的消息隊列(MQ)服務器。

1.1 AMQP

      AMQP(高級消息隊列協議)是一個異步消息傳遞所使用的應用層協議規範,做爲線路層協議,而不是API (例如JMS),AMQP客戶端可以無視消息的來源任意發送和接受信息。AMQP的原始用途只是爲金融界提供個能夠彼此協做的消息協議,而如今的目標則是爲通用消息隊列架構提供通用構建工具。所以,面向消息的中間件(MOM) 系統,例如發佈/訂閱隊列,沒有做爲基本元素實現。反而經過發送簡化的AMQ實體,用戶被賦予了構建例如這些實體的能力。這些實體也是規範的一部分, 造成了在線路層協議頂端的一個層級: AMQP模型。 這個模型統了消息模式, 諸如以前提到的發佈門訂閱,隊列,事務以及流數據,而且添加了額外的特性,例如更易於擴展,基於內容的路由。

1.2 RabbitMQ的兩大核心組件是Exchange和Queue。如圖所示:

  1. Server (broker):接受客戶端(生產者和消費者)鏈接,實現AMQP消息隊列和路由功能的進程。
  2. Virtual Host:實際上是一個虛擬概念,相似於權限控制組,一個Virtual Host裏面能夠有若干個Exchange和Queue,可是權限控制的最小粒度是Virtual Host。
  3. Exchange:接受生產者發送的消息,並根據Binding規則將消息路由給服務器中的隊列。ExchangeType決定了Exchange路由消息的行爲,例如,在RabbitMQ中, ExchangeType有direct、Fanout 和Topic三種,不一樣類型的Exchange路由的行爲是不同的。
  4. Message Queue: 消息隊列,用於存儲還未被消費者消費的消息。
  5. Message:由Header和Body組成, Header是由生產者添加的各類屬性的集合,包括Message是否被持久化、由哪一個Message Queue接受、優先級是多少等。而Body是真正須要傳輸的APP數據。
  6.BindingKey:所謂綁定就是將一個特 定的Exchange(routing-key) 和一個特定的Queue(Binding-Key)綁定起來, 綁定關鍵字成爲BindingKey。

1.3 Exchange分類一-廣播式交換器類型

1.3.1  Fanout Exchange -廣播式路由鍵。

       你只須要簡單的將隊列綁定到交換機上。一個發送到交換機的消息都會被轉發到與該交換機綁定的全部隊列上。很像子網廣播,每臺子網內的主機都得到了一份複製的消息。Fanout 交換機轉發消息是最快的。mysql

Queue向後端的分發方式:
  1.平均分配的方式,好比Queue1有10條msg,Consumer1和Consumer2各得到5條,Consumer1作的快,已經作完了,而Consumer2比較慢,只作了2條。這樣Consumer1和Consumer2之間就沒有獲得很好的利用。
  2.解決了1的問題。Consumer1和Consumer2每人先發一條,誰作完了就向Queue1返回ACK,Queue1在隊列中刪除相應的msg。而後會接着Queue1分發下一條msg。以此類推。
1.3.2 Direct Exchange -直接交互式處理路由鍵。
  須要將一個隊列綁定到交換機上,要求該消息與一個特定的路由鍵徹底匹配。這是一個完整的匹配。若是一個隊列綁定到該交換機上要求路由鍵「cat」 ,則只有被標記爲「cat"的消息才被轉發,不會轉發cat.puppy,也不會轉發cat. guard,只會轉發cat。

 1.3.2 Topic Exchange -主題式交換器。
      經過消息的路由關鍵字和綁定關鍵字的模式匹配,將消息路由到被綁定的隊列中。這種路由器類型能夠被用來支持經典的發佈/訂閱消息傳輸模型於使用主題名字空間做爲消息尋址模式,將消息傳遞給那些部分或者所有匹配主題模式的多個消費者。主題交換器類型的工做方式以下:綁定關鍵字用零個或多個標記構成, 每個標記之間用 「.」字符分隔。綁定關鍵字必須用這種形式明確說明,並支持通配符:「*」 匹配一個詞組,「#」 零個或多個詞組。所以綁定關鍵字「*.cat.#"匹配路由關鍵字「usd.cat"和"eur.cat.db」,可是不匹配"cat.mysql

2、RabbitMQ安裝及啓動

  rpm -ivh https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpmlinux

  yum install -y rabbitmq-server.noarchweb

  /sbin/rabbitmq-plugins listsql

  /sbin/rabbitmq-plugins enable rabbitmq_management後端

  systemctl start rabbitmq-server.service 等價 /sbin/rabbitmq-server start | stop | restart | reload服務器

2、Rabbi tMQ經常使用配置介紹

 通常狀況下, RabbitMQ的默認配置就足夠了。若是但願特殊設置的話,有兩個途徑:一個是環境變量的配置文件rabbitmq-env. conf ;一個是配置信息的配置文件rabbitmq. config。
  注意,這兩個文件默認是沒有的,若是須要必須本身建立。
1. rabbitmq-env.conf這個文件的位置是肯定和不能改變的, 位於: /etc/rabbitmq目錄下 (這個目錄須要本身建立)。
RABBITMQ_NODE_IP_ADDRESS:指定ip地址
RABBITMQ_NODE_PORT:指定端口號默認5672
RABBITMQ_CONFIG_FILE:配置文件的路徑,注意配置文件後綴必須是config
RABBITMQ_LOG_BASE:日誌文件路徑
 
二、rabbitm.config這是一個標準的erlang配置文件。它必須符合erlang配置文件的標準。Erlangtuple,結構爲{Key, Value} ,Key爲atom類型,Value爲一個term, 其中幾個關鍵參數爲:
  一、tcp_listerners設置rabbitmq的監聽端口,默認爲[5672].
  二、disk_free_limit磁盤低水位線,若磁盤容量低於指定值則中止接收數據。
  三、vm_memory_high_watermark, 設置內存低水位線, 若低於該水位線,則開啓流控機制,默認值是0.4.即內存總量的40%。

3、RabbitMQ命令介紹及web界面操做

  一、rabbitmqctl add_user username password  添加用戶及密碼;

[root@mage-monitor-01~/]#/sbin/rabbitmqctl add_user xiaoming 123456
Creating user "xiaoming" ...
...done.

   也能夠在web頁面操做:登陸http://10.0.0.201:15672 (你本身的IP),用戶guest(超級用戶),密碼:guest架構

 

  二、rabbitmgctl add_vhost vhostname  建立Vhost; rabbitmqctl delete_vhost vhostname  刪除Vhost;

[root@mage-monitor-01~/]#/sbin/rabbitmqctl add_vhost test_linux
Creating vhost "test_linux" ...
...done.

 

 

三、rabbitmqctl set_permissions -p V_host user 「.*」 「.*」 「.*」   綁定權限,而且具有讀寫的權限;

[root@mage-monitor-01~/]#/sbin/rabbitmqctl set_permissions -p test_linux xiaoming ".*"  ".*"  ".*"         
Setting permissions for user "xiaoming" in vhost "test_linux" ...
...done.

   

 

三、rabbitmqctl change_password username newpassword  修改用戶密碼; /sbin/rabbitmqctl delete_user <username> 刪除用戶;

[root@mage-monitor-01~/]#/sbin/rabbitmqctl delete_user xiaoming
Deleting user "xiaoming" ...
...done.

    

  四、rabbitmqctl list_queues   顯示全部隊列。

  五、rabbitmqctl list_vhosts  遍歷全部虛擬主機信息;

相關文章
相關標籤/搜索