發表於2024-11-13
《深入RabbitMQ》對RabbitMQ 這一業界主流的消息中間件做瞭全麵介紹,給齣瞭如何使用RabbitMQ 構建消息通信係統的方法和實踐。《深入RabbitMQ》從AMQP 協議齣發,深入介紹各種消息屬性,給齣RabbitMQ 在發送和消費消息上的特性和佳實踐,並闡述基於RabbitMQ 所特有的交換器組件實現靈活的消息路由機製。同時,本書也討論瞭如何利用RabbitMQ 強大的集群機製實現分布式環境下的消息通信,並展示瞭如何在RabbitMQ中,使用其他傳輸協議以及數據庫集成等功能來實現各種定製化需求。
《深入RabbitMQ》的讀者對象為從事互聯網行業中各種分布式和服務化係統開發的研究人員、高等院校計算機相關專業的研究生和本科生,以及廣大的IT 愛好者。
Gavin M. Roy 是一位積極的開源傳播者和倡導者,自20 世紀90 年代中期就一直活躍在互聯網和企業級技術之中。
第一篇 RabbitMQ和應用程序體係結構
第1章 RabbitMQ基礎 3
1.1 RabbitMQ特性以及好處 4
1.1.1 RabbitMQ與Erlang 5
1.1.2 RabbitMQ與AMQP 6
1.2 誰在使用RabbitMQ,在怎麼用 7
1.3 鬆耦閤架構的優勢 8
1.3.1 解耦你的應用 10
1.3.2 解耦數據庫寫入 11
1.3.3 無縫添加新功能 12
1.3.4 復製數據與事件 12
1.3.5 多主(Multi-Master)互聯化數據與事件 13
1.3.6 高級消息隊列模型 14
1.4 小結 16
第2章 使用AMQ協議與Rabbit進行交互 18
2.1 AMQP作為一種RPC傳輸機製 19
2.1.1 啓動會話 20
2.1.2 調整正確的信道 20
2.2 AMQP RPC幀結構 21
2.2.1 AMQP幀組件 21
2.2.2 幀類型 22
2.2.3 將消息編組成幀 23
2.2.4 方法幀結構 24
2.2.5 內容頭幀 26
2.2.6 消息體幀 26
2.3 使用協議 27
2.3.1 聲明交換器 27
2.3.2 聲明隊列 28
2.3.3 綁定隊列到交換器 29
2.3.4 發布消息到RabbitMQ 29
2.3.5 從RabbitMQ中消費消息 30
2.4 用Python編寫消息發布者 32
2.5 從RabbitMQ中獲取消息 36
2.6 小結 37
第3章 消息屬性詳解 38
3.1 閤理使用屬性 39
3.2 使用content-type屬性創建顯式的消息契約 41
3.3 通過gzip和content-encoding屬性壓縮消息大小 43
3.4 使用message-id和correlation-id引用消息 45
3.4.1 Message-id 45
3.4.2 Correlation-id 45
3.5 創建時間:timestamp屬性 46
3.6 消息自動過期 47
3.7 使用delivery-mode平衡速度和安全性 48
3.8 使用app-id和user-id驗證消息來源 49
3.8.1 app-id 50
3.8.2 user-id 51
3.9 使用type屬性獲取明細 51
3.10 使用reply-to屬性實現動態工作流 52
3.11 使用消息頭自定義屬性 53
3.12 優先級屬性 54
3.13 不能使用的屬性:cluster-id/reserved 54
3.14 小結 55
第4章 消息發布的性能權衡 58
4.1 平衡投遞速度與可靠投遞 59
4.1.1 如果沒有保證機製我們能期待什麼 60
4.1.2 使用mandatory設置,RabbitMQ將不接受不可路由消息 62
4.1.3 發布者確認作為事務的輕量級替代方法 64
4.1.4 使用備用交換器處理無法路由的消息 66
4.1.5 基於事務的批量處理 68
4.1.6 使用HA隊列避免節點故障 70
4.1.7 HA隊列與事務 72
4.1.8 通過設置delivery-mode為2將消息持久化到磁盤 72
4.2 RabbitMQ迴推 75
4.2.1 使用rabbitpy來檢測連接狀態 77
4.2.2 使用管理API管理連接狀態 77
4.3 小結 78
第5章 消費消息,避免拉取 79
5.1 對比Basic.Get 和Basic.Consume 80
5.1.1 Basic.Get 80
5.1.2 Basic.Consume 82
5.2 優化消費者性能 84
5.2.1 使用no-ack模式實現更快的吞吐量 85
5.2.2 通過服務質量設置控製消費者預取 86
5.2.3 消費者使用事務 89
5.3 拒絕消息 90
5.3.1 Basic.Reject 90
5.3.2 Basic.Nack 91
5.3.3 死信交換器 92
5.4 控製隊列 94
5.4.1 臨時隊列 94
5.4.2 永久隊列 97
5.4.3 任意隊列設置 99
5.5 小結 99
第6章 消息路由模式 101
6.1 通過direct交換器路由消息 102
6.1.1 創建應用架構 103
6.1.2 創建RPC工作者 107
6.1.3 編寫簡單的RPC發布者 110
6.2 通過fanout交換器廣播消息 115
6.2.1 修改麵部檢測消費者 116
6.2.2 創建一個簡單的圖片哈希消費者 117
6.3 使用topic交換器有選擇地路由消息 119
6.4 使用headers交換器有選擇地路由消息 122
6.5 交換器性能基準 124
6.6 交換器間路由 125
6.7 使用一緻性哈希交換器路由消息 127
6.8 小結 131
第二篇 管理數據中心或雲中的RabbitMQ
第7章 RabbitMQ集群 135
7.1 集群簡介 136
7.1.1 集群和管理界麵 137
7.1.2 集群節點類型 138
7.1.3 集群和隊列行為 139
7.2 集群設置 142
7.2.1 虛擬機設置 143
7.2.2 嚮集群中添加節點 144
7.3 小結 147
第8章 跨集群的消息分發 148
8.1 聯閤交換器和聯閤隊列 149
8.1.1 聯閤交換器 149
8.1.2 聯閤隊列 152
8.2 創建RabbitMQ虛擬機 153
8.2.1 創建首個實例 153
8.2.2 復製EC2實例 159
8.3 連接上遊節點 162
8.3.1 定義聯閤中的上遊節點 162
8.3.2 定義策略 164
8.3.3 利用上遊集閤 167
8.3.4 雙嚮聯閤交換器 170
8.3.5 使用聯閤來升級集群 171
8.4 小結 173
第三篇 集成與定製
第9章 使用替代協議 177
9.1 MQTT和RabbitMQ 178
9.1.1 MQTT協議 178
9.1.2 通過MQTT發送消息 182
9.1.3 MQTT訂閱者 184
9.1.4 MQTT插件配置 187
9.2 STOMP和RabbitMQ 189
9.2.1 STOMP協議 190
9.2.2 發布消息 191
9.2.3 消費消息 195
9.2.4 配置STOMP插件 198
9.2.5 在Web瀏覽器中使用STOMP 199
9.3 通過HTTP進行無狀態發布 200
9.3.1 statelessd的由來 200
9.3.2 使用statelessd 201
9.3.3 運營架構 202
9.3.4 通過statelessd來發布消息 203
9.4 小結 203
第10章 數據庫集成 205
10.1 PostgreSQL擴展:pg_amqp 206
10.1.1 安裝pg_amqp擴展 207
10.1.2 配置pg_amqp擴展 209
10.1.3 通過pg_amqp發送消息 210
10.2 監聽PostgreSQL通知 212
10.2.1 安裝PostgreSQL LISTEN交換器 213
10.2.2 基於策略的配置 215
10.2.3 創建交換器 217
10.2.4 創建並綁定測試隊列 217
10.2.5 通過NOTIFY發送消息 218
10.3 將消息存入InfluxDB中 219
10.3.1 InfluxDB的安裝與設置 220
10.3.2 安裝InfluxDB存儲交換器 222
10.3.3 創建測試交換器 223
10.3.4 測試交換器 224
10.4 小結 227
附錄 準備就緒 228
A.1 安裝VirtualBox 228
A.2 安裝Vagrant 230
A.3 設置Vagrant虛擬機 233
A.4 確認安裝 234
A.5 小結 236
序言
當Manning Publications 於2012 年4 月發布《RabbitMQ 實戰》一書時,RabbitMQ 迅速普及。時至今日,RabbitMQ 已然成為消息代理服務器世界的領導者之一,並且是各種應用程序應用場景的理想之選。通過分布式應用程序助力通信,在麵嚮服務體係結構中采用微服務,並實現CQRS 和事件源組件的邏輯分離,這都是一些常見的RabbitMQ 用法。
通過對AMQP 協議結構的研究,對各種交換器的逐步探索,以及對性能方麵的考察等事項,我們以全新的視角對RabbitMQ 本身進行深入探索。《深入RabbitMQ》一書旨在將你對RabbitMQ 的理解提升至新的水平,使你能在實際應用中進一步應用這些原理。
緻謝
本書寫作並非一蹴而就。首先要感謝我們的傢人和朋友,他們孜孜不倦地陪伴在左右,毫無怨言,特彆是傍晚的那些咖啡讓我們堅持不懈地編寫這樣一本書。再次說聲感謝!感謝《RabbitMQ 實戰》(2012 年4 月由Manning Publications 齣版) 的作者Alvaro Videla 和Jason J.W. Williams,是他們激發瞭無數開發者對RabbitMQ 的興趣、開拓瞭大傢的眼界,為日後的研究奠定瞭基礎。
感謝我們的開發編輯Karen,正是她在這段時間裏付齣的無盡耐心和理解,再加上整個Manning 團隊所有人的巨大努力,纔將我們推嚮成功。這份艱苦卓絕的工作曆經反復打磨,最終成就瞭本書,我們心存感恩!
同樣感謝技術校對者Karsten Strøbæk,他對本書的貢獻非常大。還要感謝以下審稿人,他們的意見對本書的幫助同樣重要。他們是Phillip Warner、Jerry Kuch、Nadia Saad Noori、Bruce Snyder、Robert Kielty、Milos Milivojevic、Arathi Maddula、Ian Dallas、George Harley、Dimitri Aivaliotis、Hechen Gao、Stefan Turalski、Andrew Meredith、Artem Dayneko、David Paccoud、Barry Alexander、Biju Kunjummen、Adolfo Pérez Álvarez、Brandon Wilhite、David Pull 和Ray Lugo。
還有許多朋友也以不同的方式為本書做齣瞭貢獻。我們無法提及每個人的名字,否則整本書都可能裝不下。總之,非常感謝那些曾經幫助我們成就這本書的朋友們!
關於本書
RabbitMQ 是采用Erlang 編寫的開源消息代理服務器,目前隸屬於Pivotal Software。它基於AMQP 開放協議,官方客戶端庫提供瞭基於Java、.NET 和Erlang 版本,以及大多數其他流行的編程語言編寫的庫。
本書力求和最新版的RabbitMQ 3.6.3 保持一緻。由於RabbitMQ 本身的發布計劃並不確定,在你拿到本書時RabbitMQ 很可能已經發布瞭新的版本。彆擔心,根據我們的經驗,RabbitMQ 極少會在新版本中削減特性,而隻會增加新特性並修復問題。
本書中使用的代碼示例是采用Python 編寫的。如果你沒有安裝Python 和RabbitMQ,或者你隻是想做實驗而不想安裝完整的環境的話,我們編寫瞭有關如何配置安裝Vagrant box 的教程,裏麵預裝瞭所有需要的程序。請確保你查看瞭附錄,清楚如何安裝並運行。
路綫圖
第1 章討論瞭RabbitMQ 的基礎:RabbitMQ 眾多的功能以及RabbitMQ 的基礎,高級消息通信隊列模型。
第2 章探討瞭AMQ 協議,講解瞭幀結構,以及從RabbitMQ 收發消息時底層處理邏輯。
第3 章的內容更為深入,講解瞭消息屬性,包括消息頭以及如何在應用程序中使用它們。我們可以利用消息頭嚮消息添加重要的元數據信息,例如content-type 以及編碼類型。
第4 章重點講解瞭性能權衡。每種級彆的保證都會對應用程序的性能産生影響。本章將介紹這些參數並幫助你在保證消息可靠性的環境所需與快速消息投遞之間達到平衡,這就是所謂的金發姑娘原則(Goldilocks Principle)。
第5 章探索瞭消息消費的概念,講解瞭Basic.Get 和Basic.Consume 兩者之間在底層上根本上的差異,以及通常情況下為什麼使用Basic.Consume 會更好。本章還講解瞭消息預取(prefetching )、服務質量、消息確認、死信交換器、臨時隊列以及消息過期。
第6 章深入講解瞭RabbitMQ 中的四種核心交換器類型,以及如何在應用架構中選擇使用,並從中受益。
第7 章著眼於如何通過集群管理來擴展RabbitMQ,集群中的節點故障恢復,以及在應用集群環境時更進一步的性能考慮。
第8 章的主要內容是集群的核心概念, 包括互聯(federate) 交換器和隊列,將RabbitMQ 集群與AWS 進行集成,以及各種策略的應用。
第9 章講解瞭與RabbitMQ 通信的其他幾種方式:使用MQTT 和STOMP 等替代協議,或者基於statelessd 的HTTP 協議進行消息通信。
最後,第10 章介紹瞭數據庫集成方麵的內容,講解瞭將PostgreSQL、InfluxDB 與RabbitMQ 集成的方式。
深入RabbitMQ 下載 mobi pdf epub txt 電子書 格式 2024
深入RabbitMQ 下載 mobi epub pdf 電子書深入RabbitMQ mobi epub pdf txt 電子書 格式下載 2024