天天看點

RabbitMQ基本特性

1.網際網路大廠為什麼選擇RabbitMQ?

2.RabbitMQ的高性能之道是如何做到的?

3.什麼是AMQP進階協定?

4.AMQP核心概念是什麼?

5.RabbitMQ整體架構模型是什麼樣子?

6.RabbitMQ消息是如何流轉的?

7.指令行與管控台

8.RabbitMQ消息生産與消費

9.RabbitMQ交換機詳解

10.RabbitMQ隊列綁定、虛拟主機、消息

RabbitMQ是一個開源的消息代理和隊列伺服器,用來通過普通協定在完全不同的應用之間共享資料,RabbitMQ使用Erlang編寫,并且基于AMQP協定。

1.網際網路大廠為什麼選擇RabbitMQ?

  ①開源、性能優秀,穩定性保障

  ②提供可靠性消息投遞模式(confirm)、傳回模式(return)

  ③與SpringAMQP完美的整合,API豐富

  ④叢集模式豐富,表達式配置,HA模式,鏡像隊列模型

  ⑤保證資料不丢失的前提做到高可靠性、可用性

2. RabbitMQ的高性能之道是如何做到的?

  Erlang語言最初在于交換機領域的架構模式,這樣使得RabbitMQ在Broker之間進行資料互動的性能是非常優秀的

  Erlang的優點:有着和原生Socket一樣的延遲。(Socket是應用層與TCP/IP協定族通信的中間軟體抽象層,它是一組接口。在設計模式中,Socket其實就是一個門面模式,它把複雜的TCP/IP協定族隐藏在Socket接口後面,對使用者來說,一組簡單的接口就是全部,讓Socket去組織資料,以符合指定的協定)

3.什麼是AMQP進階協定?

AMQP全程:Advanced Message Queuing Protocol(進階消息隊列協定)

AMQP定義:是具有現代特征的二進制協定。是一個提供統一消息服務的引用層标準進階消息隊列協定,是應用層協定的一個開放标準,為面向消息的中間件設計。

RabbitMQ基本特性

4.AMQP核心概念是什麼?

① Server:又稱Broker,接受用戶端的連接配接,實作AMQP實體服務

② Connection:連接配接,應用程式與Broker的網絡連接配接

③ Channel: 網絡信道,幾乎所有的操作都在Channel中進行,是進行消息讀寫的通道。用戶端可建立多個Channel,每個Channel代表一個會話任務。

④ Message:消息,伺服器和應用程式之間傳送的資料,由Properties和Body組成。

Properties可以對消息進行修飾,比如消息的優先級、延遲等進階特性;Body則就是消息體内容。

⑤ Virtual host: 虛拟位址,用于進行邏輯隔離,最上層的消息路由。一個Virtual Host裡面可以有若幹個Exchange和Queue,同一個Virtual Host裡面不能有相同名稱的Exchange或Queue

⑥ Exchange:交換機,接收消息,根據路由鍵轉發消息到綁定的隊列

⑦ Binding:Exchange和Queue之間的虛拟連接配接,binding中可以包含routing key

⑧ Routing key:一個路由規則,虛拟機可用它來确定如何路由一個特定消息

⑨ Queue:也稱為Message Queue,消息隊列,儲存消息并将它們轉發給消費者

5.RabbitMQ整體架構模型是什麼樣子?

RabbitMQ基本特性

生産者:Producer     交換機:Exchange   隊列Queues           消費者:Consumer

RabbitMQ基本特性

7.指令行與管控台

 基礎操作:

 Rabbitmqctl stop_app   關閉應用

 Rabbitmqctl start_app   啟動應用

 Rabbitmqctl status      節點狀态

 rabbitmqctl add_user username password  添加使用者

 rabbitmqctl list_users    列出所有使用者

 rabbitmqctl delete_user username  删除使用者

 rabbitmqctl clear_permissions –p vhostpath username  清除使用者權限

 rabbitmqctl add_vhost vhostpath   建立虛拟主機

 rabbitmqctl list_vhosts            列出所有虛拟主機

rabbitmqctl list_queues     檢視所有隊列資訊

進階操作:

 rabbitmqctl reset:                       移除所有資料,要在stop_app之後使用

 rabbitmqctl join_cluster<clusternode>[--ram]   組成叢集指令([--ram]指定存儲模式)

 rabbitmqctl cluster_status                   檢視叢集狀态

 rabbitmqctl change_cluster_node_type disc | ram   修改叢集節點的存儲形式

 rabbitmqctl forget_cluster_node [--offline]         忘記節點(摘除節點)

 rabbitmqctl rename_cluster_node oldnode1 newnode1 [oldnode2] [newnode2 ...] (修改節點名稱)

8.Exchange詳解:

1.Direct Exchange

所有發送到Direct Exchange的消息被轉發到RouteKey中指定的Queue

2.Topic Exchange

①所有發送到Topic Exchange的消息被轉發到所有關心RouteKey中指定Topic的Queue上

②Exchange将RouteKey和某Topic進行模糊比對,此時隊列需要綁定一個Topic

模糊比對的通配符:“#”比對一個或多個詞 “*”比對一個詞

RabbitMQ基本特性

3.Fanout Exchange

  ①不處理路由鍵,隻需要簡單的将隊列綁定到交換機上

         ②發送到交換機的消息都會被轉發到與該交換機綁定的所有隊列上

         ③Fanout交換機轉發消息是最快的

9.Message

 消息的建立由AMQPMessage對象來建立。伺服器和應用程式之間傳送的資料,由Properties和Payload( Body )組成。

Delivery mode:消息是否持久化,1:否,2:是

Headers:頭資訊,是由一個或多個鍵值對組成的(hashtable)

RabbitMQ基本特性

10s自動消失

如何保證消息不丢失

保證消息的不丢失

1:Exchange需要持久化

2:Queue需要持久化

3:Message需要持久化

繼續閱讀