1、Rabbitmq基礎介紹

1、介紹AMQP協議服務器

特性:
1:分佈式事務支持。
2:消息的持久化支持。
3:高性能和高可靠的消息處理優點。app

分發策略:
1: 輪詢分發
2: 公平分發分佈式

AMQP消息路由必須的三部分:交換器、路由、綁定
輸入圖片說明性能

消費者從隊列中接收消息:spa

  1. 經過AMQP的basic.consume 命令將信道置爲接收模式,直到取消隊列訂閱爲止。可以持續接收消息
  2. 經過AMQP的basic.get命令實現向隊列獲取一條消息

注意:日誌

  • RabbitMq基於AMQP協議
  • 對個消費者共用同一隊列 ,消息的消費流程循環消費,cosumerA,cosumerB。server

    一、 messageA 到達隊列先 給conusumerA ,在consumerA中確認了接收了messageA消息,RabbiMQ將messageA從隊列中刪除
    二、message發送給consumerB ranhou....
  • 問題一:consumerA沒有確認消息會怎麼樣?rabbitmq

    messageA會發送給下一個消費者,從而保證消息被消費,若是consumerA沒有確認消息,隊列將不會發送消息給消費者A,能夠利用這點來控制消費時長。
  • 問題二:使用什麼方式拒絕處理該條消息?隊列

    一、把消費者從rabbiMq斷開(會增長對RabbitMQ的負荷) 二、RabbitMq2.0.0及以上版本可使用AMQP的basic.reject命令。把reject命令的requeue 值設爲true則將消息發送到下一個message,false則是移除該消息。

名詞介紹:圖片

  • 生產者
  • 有效載荷(實際傳輸數據),
  • 標籤(描述數據,指定誰能夠複製消息)
  • 隊列
  • 消費者
  • 信道:當TCp鏈接創建會建立AMQP信道,AMQP的命令經過信道發送,每條信道被指定惟一id。

2、交換器和綁定

交換器經過路由鍵來分發消息到不一樣隊列:一共有4中類型交換器 direct、famous、topic、headers(headers交換器容許你匹配Amqp消息的header而非路由鍵)
  1. direct交換器:若是路由鍵匹配的話,消息就被投遞到對應的隊列
    輸入圖片說明
服務器必須實現direct類型交換器,包含一個空白字符串的默認交換器。隊列的名稱就是路由鍵
  1. famous 交換器:會將消息匹配到全部附加在此交換器上的隊列

3.topic交換器:經過通配符匹配消息,使得不一樣源頭的消息到達同一隊列
輸入圖片說明

3、虛擬主機

每個vhost本質上是一個mini版的RabbitMq服務器,擁有本身的隊列、交換器和綁定。擋在Rabbitmq集羣中建立了一個mq則整個集羣中都會建立這個vhost。

四、消息持久化和策略

  1. 持久化的方式: 一、把它 的投遞模式(delicery mode)選項設置爲2 二、發不到持久化的交換器 三、到達持久化的隊列。(服務器會將持久性的消息寫入到持久性日誌中)

五、使用Rabbitmq的大體流程

  • 鏈接Rabbitmq
  • 獲取信道
  • 聲明交換器
  • 聲明隊列
  • 隊列和交換器綁定
  • 消費消息
  • 關閉信道
  • 關閉鏈接

RabbitMq是運行在Erlang上的
一、啓動結點 ./sbin/rabbitmq -server
二、關閉結點 ./sbin/rabbitmqctl stop 只關閉rabbitmq ./rabbitmqctl stop_app
三、Rabbitmq日誌:LOG_BASE = /var/log/rabbitmq
會建立兩個日誌文件RABBITMQ_NODENAME-sasl.log 和RABBITMQ_NODENAME.log

文章參考書籍:《Rabbimq實戰 高效部署分佈式消息隊列》

相關文章
相關標籤/搜索