RabbitMQ基本概念和原理執行個體

來源:互聯網
上載者:User

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. 下載安裝rabbitmq-server(我用的是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可以將訊息發送到指定隊列。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.