首頁  >  文章  >  後端開發  >  RabbitMQ基本概念與原理實例

RabbitMQ基本概念與原理實例

零下一度
零下一度原創
2017-06-23 16:35:143132瀏覽

RabbitMQ基本概念和原則

1.AMQP,即Advanced Message Queuing Protocol,高級訊息佇列協議,是應用層協定的一個開放標準,為面向訊息的中間件設計。

2.RabbitMQ是一個開源的AMQP實現,伺服器端用Erlang語言寫。

3.Channel 

  Channel是我們與RabbitMQ打交道的最重要的一個接口,我們大部分的業務操作是在Channel這個接口中完成的,包括定義Queue、定義Exchange、綁定Queue與Exchange、發布訊息等。

4.Exchange(生產者將訊息傳送到Exchange(交換器),由Exchange將訊息路由到一個或多個Queue中(或丟棄),RabbitMQ常用的Exchange Type有fanout、direct、topic、headers這四種)

#5.Queue(RabbitMQ的內部對象,用於儲存訊息)

6.基本工作原理

 客戶端(生產者) send Message -->Exchange (交換器透過不同的型別將訊息儲存到對應的queue)-->Queue  

 客戶端(消費者)透過訂閱來消費queue中的訊息。

 上述基礎概念整理來自 RabbitMQ基礎概念詳細介紹 

在Windows系統中安裝RabbitMQ

# 1. 下載安裝erlang (我用的是otp_win64_19.3版本)  

      下載位址 (依作業系統選擇32還64位元)  

  2.qserver(依作業系統選擇為我使用的是rabbitmq-server-3.6.10版本)

     下載地址 

     安裝好後,在看裝目錄下看到

    

#接下來用啟用DOS指令a. cd 到sbin目錄下,我的安裝目錄是D:\RabbitMQServer\rabbitmq_server-3.6.10\sbin, 輸入D: 回車,cd  RabbitMQServer\rabbitmq_server-3.6 .10\sbin

 b. 查看安裝是否成功指令:

rabbitmqctl status

# c.安裝管理外掛指令:

rabbitmq-plugins enable rabbitmq_management

##安裝成功,在瀏覽器中輸入 http:/ /127.0.0.1:15672/

 

#輸入來賓帳號guest 密碼guest ,成功登陸進來,是不是有點激動。

 guest 帳號是管理員帳號,可以新增Exchanges,Queues,Admin。但我們通常不使用guest帳號,繼續用指令來新增帳號和權限。

d:新增使用者:

rabbitmqctl.bat add_user username password

 

e:新增「超級管理員」角色: rabbitmqctl.bat set_user_tags username administrator

 

mymq帳號也是超級管理員了,Can access virtual hosts :No access ,可以看到還沒有能夠存取的虛擬機,接下來新增虛擬機。

f: 新增虛擬機器:  rabbitmqctl add_vhost vhostName

### myvhost虛擬機器並沒有Users,接下來給虛擬機器綁定帳號。 ######g:設定虛擬機器與使用者權限:###rabbitmqctl set_permissions -p 虛擬機器名稱帳號名稱".*" ".*" ".*"########## ## #######h:處於習慣我一般刪除掉guest帳號:###rabbitmqctl.bat delete_user username######

 好了,重新登陸管理頁面,一切正常,接下來開始實戰了。

EasyNetQ的基本使用

專案中安裝EasyNetQ

EasyNetQ是依賴RabbitMQ.Client的,所以會被一併安裝到專案中。

Publish發布訊息

 

#Model有Queue的特性,定義Queue名稱和Exchange名稱。然後直接用Publish方法把Msg透過Model指定的交換器推送到指定佇列去。

運行程式碼,看看MQ的管理頁面。

 已經建立了Model指定的交換器TestQueue.Exchange, Type:topic , Features:D 。 D:Durable 說明預設建立的交換器是持久化的。

 因為還沒有訂閱訊息,所以在Queues中還看不到對應的佇列。

 Subscribe訂閱訊息

  

 為什麼要套在訂閱碼上套用一個while(true)了? 是為了把控制台程式模擬成Windows服務,因為控制台程式運行一閃而過,沒辦法真正訂閱到MQ的訊息。

 實際開發中,一般用Topself來把控制台程式發佈成Windows服務,後面有時間再寫一篇關於Topself的學習部落格。

 再重複剛才的Publish操作,測試下整個流程。

 

自訂Topic

#這樣訊息會被傳送到名稱為Test.開頭的所有Queue隊列中。

SendReceive

透過send和receive可以將訊息傳送到指定佇列。

 

#

以上是RabbitMQ基本概念與原理實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn