産品特色
編輯推薦
絕大多數應用程序的核心都有一個虛擬交換機,用於在服務器、程序和服務之間快速傳遞消息。RabbitMQ是一個高效且易於部署的消息隊列服務器,它可以輕而易舉地處理各種情形下的消息通信,不論是網絡初創公司還是大型企業係統。
本書能夠教會你如何使用RabbitMQ消息通信服務器,構建和管理用不同語言編寫的可伸縮應用。這很容易上手。你將學習消息隊列的工作原理以及RabbitMQ是如何適用的。然後,你將通過許多案例來探索實踐當中的可擴展性和互操作性問題。最後,你將學習如何將Rabbit打造成一部運作良好的機器,以應對24×7×365的無間斷工作環境。
本書包以下內容
□ 學習基本消息通信設計模式
□ 使用模式來滿足按需擴展
□ 整閤PHP編寫的前端和用任何語言編寫的後端
□ 在30分鍾內實現發布/訂閱的告警服務
□ 配置RabbitMQ內建集群
□ 監控、管理、擴展並調試RabbitMQ
本書是為那些熟悉Python、PHP、Java、.NET或者任何其他現代編程語言的開發者編寫的。無須任何RabbitMQ經驗。
內容簡介
《RabbitMQ實戰:高效部署分布式消息隊列》對RabbitMQ做瞭全麵、翔實的講解,體現瞭兩位專傢的真知灼見。《RabbitMQ實戰:高效部署分布式消息隊列》首先介紹瞭有關MQ的曆史,然後從基本的消息通信原理講起,帶領讀者一路探索RabbitMQ的消息通信世界。這當中不僅包含瞭針對單颱RabbitMQ服務器和RabbitMQ集群的講解,還教導讀者如何使用各種工具來進行監控。
《RabbitMQ實戰:高效部署分布式消息隊列》內容淺顯易懂,文筆風趣幽默。《RabbitMQ實戰:高效部署分布式消息隊列》中包含瞭豐富的、可以運行的示例程序源代碼,讀者可以自行下載並運行,這種親身實踐有助於加深對相關主題的理解。對於初學者來說,這樣的編排非常適用。
作者簡介
Alvaro Videla,是一名專門從事基於MQ應用程序的開發者和架構師。
Jason J.W. Williams,是消息通信服務供應商DigiTar公司的CTO,他領導著設計與開發工作。
精彩書評
在這份傑齣的工作中,兩位專傢為我們分享瞭他們多年運行大規模RabbitMQ係統的經驗。
—— Alexis Richardson, VMware前言的作者
寫得很棒,充滿智慧,簡單易懂。
——Karsten Str?b?k,微軟
這是RabbitMQ大全,當中包含瞭各種有廣度、有深度的案例。
——Patrick Lemiuex,來自Voxel Internap
本書將帶你領略消息通信的美妙世界。
——David Dossot, Mule in Action的閤作者
目錄
第1章 天降奇兵1
1.1 住在彆人的地下城堡 3
1.2 救世主AMQP 5
1.3 RabbitMQ簡史 5
1.4 百裏挑一 8
1.5 在UNIX係統上安裝RabbitMQ 8
1.5.1 為什麼環境很重要——生活在Erlang 的世界裏 9
1.5.2 獲取安裝包 9
1.5.3 設置文件夾結構 9
1.5.4 首次運行Rabbit 10
1.6 總結 12
第2章 理解消息通信13
2.1 消費者和生産者(這可不是經濟學課程哦) 14
2.2 從底部開始構造:隊列 17
2.3 聯閤起來:交換器和綁定 22
2.4 多租戶模式:虛擬主機和隔離 27
2.5 我的消息去哪兒瞭呢?持久化和你的策略 28
2.6 把所有內容結閤起來:一條消息的一生 32
2.7 使用發送方確認模式來確認投遞 37
2.8 總結 40
第3章 運行和管理Rabbit 42
3.1 服務器管理 43
3.1.1 啓動節點 43
3.1.2 停止節點 45
3.1.3 關閉和重啓應用程序:有何差彆 46
3.1.4 Rabbit 配置文件 46
3.2 請求許可 48
3.2.1 管理用戶 49
3.2.2 Rabbit 的權限係統 50
3.3 檢查 54
3.3.1 查看數據統計 54
3.3.2 理解RabbitMQ 日誌 59
3.4 修復Rabbit:疑難解答 63
由badrpc、nodedown 和其他Erlang 引起的問題 63
3.5 總結 68
第4章 解決Rabbit相關問題:編碼與模式69
4.1 解耦風雨路:誰將我們推嚮消息通信 70
4.1.1 異步狀態思維(分離請求和動作) 70
4.1.2 提供擴展性:沒有負載均衡器的世界 73
4.1.3 零成本API :語言不應成為枷鎖 73
4.2 發後即忘模型 74
4.2.1 發送告警 75
4.2.2 並行處理 84
4.3 彆忘瞭:用RabbitMQ實現RPC並等待響應 92
4.3.1 私有隊列和發送確認 93
4.3.2 使用reply_to 來實現簡單的JSON RPC 93
4.4 總結 98
第5章 集群並處理失敗99
5.1 開足馬力:RabbitMQ集群 100
5.2 集群架構 101
5.2.1 集群中的隊列 101
5.2.2 分布交換器 103
5.2.3 是內存節點還是磁盤節點 104
5.3 在你的筆記本電腦上設置集群 106
5.4 將節點分布到更多的機器上 110
5.5 升級集群節點 114
5.6 鏡像隊列和保留消息 115
5.6.1 聲明並使用鏡像隊列 115
5.6.2 鏡像隊列工作原理 118
5.7 總結 120
第6章 從故障中恢復121
6.1 為Rabbit做負載均衡 122
6.1.1 安裝HAProxy 124
6.1.2 配置HAProxy 125
6.2 連接丟失和故障轉移 127
6.3 總結 134
第7章 warren和Shovel:故障轉移和復製 135
7.1 warren:另一種集群方式 136
7.2 設定負載均衡器——基於主/從的集群 138
7.3 遠距離通信和復製 142
7.3.1 給Rabbit 裝備Shovel :Shovel 插件介紹 142
7.3.2 安裝Shovel 145
7.3.3 配置並運行Shovel 146
7.4 總結 152
第8章 從Web端管理RabbitMQ 154
8.1 超越rabbitmqctl:RabbitMQ Management插件 155
8.1.1 為何需要Management 插件 155
8.1.2 Management 插件功能 155
8.1.3 啓用Management 插件 156
8.2 從Web控製颱來管理RabbitMQ 158
8.2.1 監控Erlang VM 158
8.2.2 從JSON 文件導入配置 159
8.3 從Web控製颱管理用戶 160
8.3.1 創建用戶 161
8.3.2 管理用戶的權限 162
8.4 從Web控製颱管理交換器和隊列 163
8.4.1 列齣隊列信息 165
8.4.2 創建隊列 166
8.5 迴到命令行 168
8.5.1 為什麼需要另一個CLI 168
8.5.2 CLI 管理:一種更簡單的方式 170
8.5.3 安裝rabbitmqadmin 腳本 170
8.5.4 清空隊列、創建交換器等 171
8.6 總結 172
第9章 使用REST API控製Rabbit 173
9.1 能用RabbitMQ REST API做什麼 175
9.2 對客戶端授權訪問 177
9.3 訪問數據統計 178
9.4 自動化vhost和用戶配置 181
9.5 總結 .186
第10章 監控187
10.1 監控RabbitMQ:密切關注你的warren 188
10.1.1 為Nagios 編寫健康檢測 188
10.1.2 使用AMQP 模擬檢測來確認RabbitMQ 是否運行 190
10.1.3 使用REST API 來檢測 193
10.1.4 監控配置文件修改 196
10.1.5 監控集群狀態 201
10.2 確保消費者正常工作 206
10.2.1 通過AMQP 監控隊列等級 208
10.2.2 使用REST API 來監控隊列級彆 212
10.2.3 建立隊列的消息計數基準經驗法則 215
10.3 總結216
第11章 提升性能,保障安全217
11.1 對速度的需求 218
11.1.1 消息持久化 218
11.1.2 消息確認 219
11.1.3 路由算法和綁定規則 219
11.1.4 投遞消息 221
11.2 內存使用率和進程限製 223
11.2.1 內存使用率 223
11.2.2 Erlang 進程計數 226
11.3 SSL連接 ..227
11.3.1 SSL 證書.228
11.3.2 設置證書頒發機構 ..229
11.3.3 生成根證書 233
11.3.4 生成服務器端證書 234
11.3.5 生成客戶端證書 235
11.3.6 啓用RabbitMQ 的SSL 監聽器 236
11.3.7 測試你的RabbitMQ SSL 設置 237
11.4 總結 239
第12章 聰明的Rabbit:擴展RabbitMQ241
12.1 RabbitMQ插件 242
12.1.1 你可以用插件做什麼 242
12.1.2 在哪裏可以找到插件 244
12.1.3 安裝插件 244
12.1.4 移除插件 245
12.2 製作你自己的插件 247
12.2.1 獲取RabbitMQ Public Umbrella 248
12.2.2 設置文件夾結構 249
12.2.3 包含插件構建係統 250
12.2.4 創建Erlang 應用文件 250
12.3 創建自定義交換器模塊 252
12.3.1 將交換器注冊到RabbitMQ 254
12.3.2 實現交換器behaviour 257
12.3.3 編譯自定義交換器 264
12.3.4 測試你的插件 267
12.4 總結 271
附錄A 在Java和.NET上使用Rabbit 273
附錄B 在綫資源302
附錄C 在Windows上安裝RabbitMQ 307
精彩書摘
《RabbitMQ實戰:高效部署分布式消息隊列》:
歡迎閱讀本書。如果你像我一樣,你很有可能在想:“我是否應該從頭開始閱讀呢?”唉,市麵上的技術書籍琳琅滿目,但並不是所有的圖書都值得花費時間關注。所以請讓我邀你繼續往下閱讀,看看下麵這份說明是否閤你的胃口:
你想要通過一種實用的方法來學習推技術、流數據,以及其他消息通信模式。
你想要獲得專傢級彆的RabbitMQ 技能,包括在設計方麵和生産環境運行方麵的最 佳實踐。
換句話說,本書不僅僅是一本RabbitMQ 指南。它會為你講解能覆蓋多種使用場景的基本設計模式。它展現瞭為何越來越多的應用開始使用這些模式,以及哪些“可以做”、哪些“不能做”。
這些模式是怎樣的呢?如果你曾經有想法將係統繪成一幅信息流或者網絡圖,而非棧的形式,那麼你可能正在使用,或者正準備使用消息通信。你可能一直在考慮數據投遞、非阻塞操作或者推送通知。或者,你想使用發布/ 訂閱模式、異步處理或是工作隊列。所有這些模式構成瞭眾所周知的消息通信(messaging)。
消息通信是一種至關重要的能力:它使得軟件應用可以相互連接並得以擴展。應用程序們既可以像一個巨大應用中的組件一樣相互連接起來,也可以連接用戶的設備和數據。消息通信從本質上來說是異步的,因為它通過分隔瞭數據的發送和接收來解耦應用。最奇妙的地方在於該連接模式可以在任何規模下以相同的方式工作。
規模是關鍵點。互聯網無處不在,它作為應用程序投遞的基礎,使得規模在應用程序設計中成為關鍵因素。我們已經無法停留在小規模的思考方式上。最近,術語“大數據”(big data)已經變得非常流行。不過相較於最近幾年來說,所有事物都往大的方嚮發展瞭。
舉例來說,移動連接設備的數量很快就將超過地球上人口的數量。當我編寫本書時,Facebook 正準備IPO。CTO Bret Taylor 說道:“如果Mark Zuckerberg 在宿捨編寫Facebook 的時候這些技術就已經成熟的話,那麼現在的Facebook 就已經是一個移動應用瞭。”
花點時間想想。大多數應用曾經都是這樣運作的:加載文檔或者從數據庫獲取數據,做一些處理,並將結果寫入磁盤。將來的應用程序會更像Facebook :總是在綫,並且托管在雲端,在任何地方都能訪問。輸入和處理是連續且自動的,並即時輸齣用戶想要的過濾信息流。
如果不采用一係列專門的設計模式的話,那麼這些級彆的自動化、可訪問性和伸縮性都無從談起。在本書中你就能學到這些模式。作為現代消息通信技術發起者之一,Derek Collison 將消息通信描述為“移動的數據”,這一點令人印象深刻。很難想象有什麼應用是不需要移動數據的。因此,消息通信無處不在。
這本書可以讓你立即上手。消息通信模式將以可運行代碼的形式展現在你麵前。作者也會幫助你在自己的係統上運行起來。在Jason J. W. Williams 和Alvaro Videla的幫助下,你就能零距離接觸那些擁有多年運行大規模RabbitMQ 係統經驗的專傢瞭。本書是他們將經驗分享給社區這一傑齣工作的成果。
在對RabbitMQ 有瞭一點感覺之後,不管你使用何種語言編寫程序,都能很容易地在廣大RabbitMQ 用戶社區裏尋求到幫助並找到更多示例。這使得RabbitMQ成為能滿足你消息通信需求的最 佳選擇。
希望你已經被我吊起瞭胃口,準備翻開下一頁繼續閱讀。書中會有關於消息和RabbitMQ 的一切,作者將會為你揭開它們的神秘“麵紗”。
……
前言/序言
譯者序
筆者從事互聯網行業已五年有餘,經曆過大大小小十幾個項目,其中包括金融領域方麵的交易係統、醫療護理信息係統,再到後來的淘寶第三方軟件供應商。這些項目不僅為我帶來瞭豐富的閱曆,更讓我認識到軟件開發的根本就在於降低軟件復雜性。因此,我們需要采用可復用的軟件設計模式,選取閤適的軟件構件來搭建自己的係統。這當中就用到瞭消息隊列。
各位讀者可能對消息隊列並不陌生。消息隊列提供一個異步通信協議,消息的發送者不用一直等待,直到消息被成功處理;而是立即返迴。消息被暫存於隊列當中,
對消息感興趣的消費者會訂閱消息並處理它們。那麼,在什麼樣的場景下需要使用消息隊列呢?其中之一就是係統集成。這些係統可能是公司的遺留係統,抑或是第三方維護的係統。集成的方法有很多,其中之一是讓這些係統往數據庫的某幾張錶寫入數據,然後讓新的係統定時地去輪詢並取齣數據進行處理。這已經具備瞭消息隊列通信的雛形:其中的數據庫錶就是消息隊列,它定義瞭消息的標準結構,並暫存待處理的消息。對於小型係統和簡單的需求來講,這樣的解決方案沒什麼問題,並且足夠應付瞭。但是隨著日後業務需求的擴張,接入的係統越來越多,對於消息通信的需求也變得越來越復雜:
1. 你需要將同一條消息發送給多個感興趣的係統,同時又需要讓係統隻接受符閤特定模式的消息。
2. 你開始覺得係統當中的同步處理方式嚴重影響瞭吞吐量,你想把用戶訂單處理、消息通知等都修改成異步處理的方式。
3. 你開始關注係統的高可用性。同時你還想實時觀測係統當中訂單消息的處理速率,以便及時應對峰值壓力。
通過使用標準的消息隊列係統就可以輕鬆處理以上問題。當然它們提供的功能遠不止這些。市麵上有很多開放源碼的消息隊列係統,包括JBoss Messaging、JORAM、Apache ActiveMQ、Sun Open Message Queue、Apache Qpid、RabbitMQ,等等。其中就有本書討論的RabbitMQ。它實現瞭AMQP 協議,並且遵循Mozilla Public License 開源協議。它支持多種編程語言,可以方便地和Spring 集成。最重要的一點是,使用消息隊列並不是“殺雞焉用牛刀”的問題,而是一種未雨綢繆,隨著係統不斷演進,你終將從消息隊列中獲益。
翻譯一本書絕非易事。在此,我要感謝給予我幫助的趙震一和陳祥奎夫婦,你們是我的摯友與伯樂。感謝電子工業齣版社的編輯張春雨和李雲靜,是你們的細心指導保證瞭本書的翻譯質量。最後感謝我的女友,你是我的精神支柱,在你的陪伴和支持下,我得以全心全意地完成工作。
由於時間倉促,文中難免有不足之處,希望讀者海涵,也希望各位能和我一樣從中收獲知識和快樂,謝謝大傢。
汪佳南
2015 年9 月於杭州
序
歡迎閱讀本書。如果你像我一樣,你很有可能在想:“我是否應該從頭開始閱讀呢?”唉,市麵上的技術書籍琳琅滿目,但並不是所有的圖書都值得花費時間關注。所以請讓我邀你繼續往下閱讀,看看下麵這份說明是否閤你的胃口:
你想要通過一種實用的方法來學習推技術、流數據,以及其他消息通信模式。
你想要獲得專傢級彆的RabbitMQ 技能,包括在設計方麵和生産環境運行方麵的最佳實踐。
換句話說,本書不僅僅是一本RabbitMQ 指南。它會為你講解能覆蓋多種使用場景的基本設計模式。它展現瞭為何越來越多的應用開始使用這些模式,以及哪些“可以做”、哪些“不能做”。
這些模式是怎樣的呢?如果你曾經有想法將係統繪成一幅信息流或者網絡圖,而非棧的形式,那麼你可能正在使用,或者正準備使用消息通信。你可能一直在考慮數據投遞、非阻塞操作或者推送通知。或者,你想使用發布/ 訂閱模式、異步處理或是工作隊列。所有這些模式構成瞭眾所周知的消息通信(messaging)。
消息通信是一種至關重要的能力:它使得軟件應用可以相互連接並得以擴展。應用程序們既可以像一個巨大應用中的組件一樣相互連接起來,也可以連接用戶的設備和數據。消息通信從本質上來說是異步的,因為它通過分隔瞭數據的發送和接收來解耦應用。最奇妙的地方在於該連接模式可以在任何規模下以相同的方式工作。
規模是關鍵點。互聯網無處不在,它作為應用程序投遞的基礎,使得規模在應用程序設計中成為關鍵因素。我們已經無法停留在小規模的思考方式上。最近,術語“大數據”(big data)已經變得非常流行。不過相較於最近幾年來說,所有事物都往大的方嚮發展瞭。
舉例來說,移動連接設備的數量很快就將超過地球上人口的數量。當我編寫本書時,Facebook 正準備IPO。CTO Bret Taylor 說道:“如果Mark Zuckerberg 在宿捨編寫Facebook 的時候這些技術就已經成熟的話,那麼現在的Facebook 就已經是一個移動應用瞭。”
花點時間想想。大多數應用曾經都是這樣運作的:加載文檔或者從數據庫獲取數據,做一些處理,並將結果寫入磁盤。將來的應用程序會更像Facebook :總是在綫,並且托管在雲端,在任何地方都能訪問。輸入和處理是連續且自動的,並即時輸齣用戶想要的過濾信息流。
如果不采用一係列專門的設計模式的話,那麼這些級彆的自動化、可訪問性和伸縮性都無從談起。在本書中你就能學到這些模式。作為現代消息通信技術
RabbitMQ實戰:高效部署分布式消息隊列 epub pdf mobi txt 電子書 下載 2024
RabbitMQ實戰:高效部署分布式消息隊列 下載 epub mobi pdf txt 電子書