iOS RMQClient(RabbitMQ)第一章---Hello World

前言:這可能將會是關(guān)于RabbitMQ的一系列文章,博主也是剛接觸,許多東西也不是很懂硝枉,如有錯誤,還請指正倦微。

一妻味、安裝RabbitMQ Management

如果有后臺已經(jīng)幫你搭好了環(huán)境,你可以跳過這一步璃诀。

  1. 使用Mac終端,輸入brew install rabbitmq蔑匣,則可以安裝RabbitMQ了劣欢,Mac端安裝還是比較容易的棕诵。這里需要注意的是,你可能需要安裝Homebrew這個工具凿将,關(guān)于如何安裝請自行查找相關(guān)文章校套,本篇不再說明。
  2. 使用瀏覽器牧抵,在網(wǎng)址欄輸入localhost:15672笛匙,如果你看到下圖,那么說明你安裝成功犀变。
正確安裝RabbitMQ

二妹孙、集成RMQClient

  1. 在podfile里面輸入pod RMQClient
  2. pod install

三、Hello World

首先來了解幾個概念获枝,下面是百度百科的資料:

Broker:簡單來說就是消息隊列服務(wù)器實體蠢正。
  Exchange:消息交換機,它指定消息按什么規(guī)則省店,路由到哪個隊列嚣崭。
  Queue:消息隊列載體,每個消息都會被投入到一個或多個隊列懦傍。
  Binding:綁定雹舀,它的作用就是把exchange和queue按照路由規(guī)則綁定起來。
  Routing Key:路由關(guān)鍵字粗俱,exchange根據(jù)這個關(guān)鍵字進行消息投遞说榆。
  vhost:虛擬主機,一個broker里可以開設(shè)多個vhost源梭,用作不同用戶的權(quán)限分離娱俺。
  producer:消息生產(chǎn)者,就是投遞消息的程序废麻。
  consumer:消息消費者荠卷,就是接受消息的程序。
  channel:消息通道烛愧,在客戶端的每個連接里油宜,可建立多個channel,每個channel代表一個會話任務(wù)怜姿。
消息隊列的使用過程大概如下:
(1)客戶端連接到消息隊列服務(wù)器慎冤,打開一個channel。
 〔茁(2)客戶端聲明一個exchange蚁堤,并設(shè)置相關(guān)屬性。
 〉痢(3)客戶端聲明一個queue披诗,并設(shè)置相關(guān)屬性撬即。
  (4)客戶端使用routing key呈队,在exchange和queue之間建立好綁定關(guān)系剥槐。
  (5)客戶端投遞消息到exchange宪摧。
exchange接收到消息后粒竖,就根據(jù)消息的key和已經(jīng)設(shè)置的binding,進行消息路由几于,將消息投遞到一個或多個隊列里蕊苗。
exchange也有幾個類型,完全根據(jù)key進行投遞的叫做Direct交換機孩革,例如岁歉,綁定時設(shè)置了routing key為”abc”,那么客戶端提交的消息膝蜈,只有設(shè)置了key為”abc”的才會投遞到隊列锅移。對key進行模式匹配后進行投遞的叫做Topic交換機,符號”#”匹配一個或多個詞饱搏,符號””匹配正好一個詞非剃。例如”abc.#”匹配”abc.def.ghi”,”abc.”只匹配”abc.def”推沸。還有一種不需要key的备绽,叫做Fanout交換機,它采取廣播模式鬓催,一個消息進來時肺素,投遞到與該交換機綁定的所有隊列。

我們做完上面的準(zhǔn)備工作宇驾,那么就可以開始擼代碼了倍靡。
在你的ViewController文件里包含頭文件,#import <RMQClient/RMQClient.h>课舍,然后寫一個發(fā)送一個接收的方法塌西。

3.1 發(fā)送方法

- (void)send
{
    RMQConnection * conn = [[RMQConnection alloc] initWithUri:@"amqp://wubb:123456@192.168.76.78" delegate:[RMQConnectionDelegateLogger new]];
//    RMQConnection * conn = [[RMQConnection alloc] initWithDelegate:[RMQConnectionDelegateLogger new]];
    [conn start];
    id<RMQChannel>channel = [conn createChannel];
    RMQQueue * queue = [channel queue:@"hello"];
    [channel.defaultExchange publish:[@"hello world" dataUsingEncoding:NSUTF8StringEncoding] routingKey:queue.name];
    [conn close];
}

在上段代碼中:

  1. 我們創(chuàng)建了一個連接,然后開始連接打開一個通道筝尾;
  2. 我們聲明了一個隊列捡需,并建立了隊列與通道之間的關(guān)系。
  3. 我們使用routingKey將消息發(fā)送到了channel的默認Exchange上筹淫。
    3.1 如果不使用默認Exchange站辉,那么我們則可以自己創(chuàng)建一個Exchange。
    3.2 創(chuàng)建好Exchange后,使用routingkey將queue和Exchange建立綁定關(guān)系饰剥。
    3.3 發(fā)送消息狸相。

在這段代碼里面,需要注意的是捐川,如果你的控制臺也就是后臺服務(wù)是由別的同事搭的,你需要連接他的后臺逸尖,那么你應(yīng)該使用代碼中我沒有注釋的那一行古沥,帶上URi參數(shù)過去,參數(shù)格式是:amqp(amqps)://賬號:密碼@主機(IP或域名):端口/vhost 娇跟,如果后臺服務(wù)的端口和vhost都是默認的岩齿,那么則可省略,即像代碼中那樣就OK了苞俘;如果你是自己搭建的后臺服務(wù)盹沈,則使用注釋掉的那一行就行。
此處參數(shù)需要注意的是:amqp是不經(jīng)過SSL或者TLS認證的吃谣,amqps則是需要SSL或者TLS認證的乞封,這個地方一定要注意了,因為坑了我啊岗憋。肃晚。也怪我自己眼神不好,沒看清仔戈。关串。。兩個方法的詳細說明监徘,可以在庫文件里面看到晋修,這里就不列舉出來了。

3.2 接收方法

- (void)receive
{
    RMQConnection * conn = [[RMQConnection alloc] initWithUri:@"amqp://wubb:123456@192.168.76.78" delegate:[RMQConnectionDelegateLogger new]];
//    RMQConnection * conn = [[RMQConnection alloc] initWithDelegate:[RMQConnectionDelegateLogger new]];
    [conn start];
    id<RMQChannel>channel = [conn createChannel];
    RMQQueue * queue = [channel queue:@"hello"];
    [queue subscribe:^(RMQMessage * _Nonnull message) {
        NSLog(@"message:%@",[[NSString alloc] initWithData:message.body encoding:NSUTF8StringEncoding]);
    }];  
}

在接收方法的代碼中:

  1. 創(chuàng)建連接凰盔,并打開通道
  2. 聲明隊列墓卦,此時的隊列要和發(fā)送中的隊列名相同
  3. 告訴服務(wù)器,我們訂閱了queue這個隊列的消息廊蜒,當(dāng)服務(wù)器發(fā)送消息時趴拧,那么我們就能在block里面收到這個消息了

此段代碼我們要注意的是,接收不要關(guān)閉連接I蕉!V瘛!敲黑板Fň蟆D杂帧!

運行程序后,我們就會收到消息了问麸。

成功收到消息

好了往衷,那么這篇文章就完了。

參考資料:

  1. RabbitMQ官方指導(dǎo)
  2. iOS RabbitMQ集成及使用

這里是寫完的Demo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末严卖,一起剝皮案震驚了整個濱河市席舍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌哮笆,老刑警劉巖来颤,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異稠肘,居然都是意外死亡福铅,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門项阴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來滑黔,“玉大人,你說我怎么就攤上這事环揽÷缘矗” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵歉胶,是天一觀的道長撞芍。 經(jīng)常有香客問我,道長跨扮,這世上最難降的妖魔是什么序无? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮衡创,結(jié)果婚禮上帝嗡,老公的妹妹穿的比我還像新娘。我一直安慰自己璃氢,他們只是感情好哟玷,可當(dāng)我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著一也,像睡著了一般巢寡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上椰苟,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天抑月,我揣著相機與錄音,去河邊找鬼舆蝴。 笑死谦絮,一個胖子當(dāng)著我的面吹牛题诵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播层皱,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼性锭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了叫胖?” 一聲冷哼從身側(cè)響起草冈,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瓮增,沒想到半個月后疲陕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡钉赁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了携茂。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片你踩。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖讳苦,靈堂內(nèi)的尸體忽然破棺而出带膜,到底是詐尸還是另有隱情,我是刑警寧澤鸳谜,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布膝藕,位于F島的核電站,受9級特大地震影響咐扭,放射性物質(zhì)發(fā)生泄漏芭挽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一蝗肪、第九天 我趴在偏房一處隱蔽的房頂上張望袜爪。 院中可真熱鬧,春花似錦薛闪、人聲如沸辛馆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽昙篙。三九已至,卻和暖如春诱咏,著一層夾襖步出監(jiān)牢的瞬間苔可,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工袋狞, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留硕蛹,地道東北人醇疼。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像法焰,于是被迫代替她去往敵國和親秧荆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 來源 RabbitMQ是用Erlang實現(xiàn)的一個高并發(fā)高可靠AMQP消息隊列服務(wù)器埃仪。支持消息的持久化乙濒、事務(wù)、擁塞控...
    jiangmo閱讀 10,344評論 2 34
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理卵蛉,服務(wù)發(fā)現(xiàn)颁股,斷路器,智...
    卡卡羅2017閱讀 134,600評論 18 139
  • 1. 歷史 RabbitMQ是一個由erlang開發(fā)的AMQP(Advanced Message Queue )的...
    高廣超閱讀 6,092評論 3 51
  • 1 RabbitMQ安裝部署 這里是ErLang環(huán)境的下載地址http://www.erlang.org/down...
    Bobby0322閱讀 2,223評論 0 11
  • 什么叫消息隊列 消息(Message)是指在應(yīng)用間傳送的數(shù)據(jù)傻丝。消息可以非常簡單甘有,比如只包含文本字符串,也可以更復(fù)雜...
    lijun_m閱讀 1,335評論 0 1