-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

深入RabbitMQ

( 簡體 字)
作者:汪佳南,鄭天民類別:1. -> 程式設計 -> 綜合
譯者:
出版社:電子工業出版社深入RabbitMQ 3dWoo書號: 49228
詢問書籍請說出此書號!

缺書
NT售價: 395

出版日:6/1/2018
頁數:252
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787121341809
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

譯者序
當下互聯網行業中的各種分布式和服務化系統的開發本質上就是解決一個問題,即系統如何進行拆分和集成。服務拆分需要用到面向領域思想,而服務集成則可以采用RPC、REST、消息通信等多種技術體系。從軟件設計角度講,無論是RPC 還是REST 都存在一定的耦合度問題。耦合度包括技術耦合、空間耦合和時間耦合等不同的表現形式,而消息通信機制能夠降低這幾種耦合度。
消息通信機制在消息發送方和消息接收方之間添加了存儲轉發(Store and Forward)功能。通過存儲轉發功能,消息發送方和消息接收方之間并不需要知曉對方的存在,也不需要同時在線,更不會限制必須采用同樣的實現技術。緊耦合的單階段遠程方法調用因而轉變成松耦合的兩階段過程,技術、空間和時間上的約束憑借中間層得到顯著緩解。
然而消息通信機制并沒有想象的那么簡單。我們需要在消息的生產者和消費者之間建立有效的通信鏈路并確定雙方的通信協議。消息的消費者通常采取主動拉取和被動消費這兩
種模式實現消息消費;同時,出于穩定性的考慮,消費者還需要提供限流的能力。消息發送方的邏輯則相對簡單,一旦消息發送出去之后,它將依賴路由規則,最終投遞給符合條件的一個或多個消費者。這些構成了消息通信機制所應該具備的核心組件。
圍繞消息通信機制的這些核心組件,業界存在一批關于消息通信的設計規范。而基于這些規范,不同廠商也提供了多種消息通信系統實現方案。本書所介紹的是基于高級消息隊列協議(Advanced Message Queuing Protocol,AMQP)規范的RabbitMQ,在內容上詳細闡述了RabbitMQ 的以下幾個主題:
● AMQP 規范以及消息定義。
● 消息發送的過程以及可靠消息投遞機制。
● 消息消費的過程以及消費者性能優化方法。
● 交換器組件以及消息路由機制。
● RabbitMQ 分布式集群構建。
● RabbitMQ 在系統集成上的具體應用。
目前,RabbitMQ 在各大互聯網公司中應用十分廣泛。通過RabbitMQ 所提供的豐富的交互API、友好的管理界面以及與生俱來的分布式特性,我們可以輕松構建一個強大的消息通信系統。然而消息通信系統的構建一方面降低了耦合性,另一方面也不可避免地引入了復雜性。如果使用不當,反而會引發各種問題。本書深入分析消息通信的各個方面,不僅介紹了RabbitMQ 的各項基本功能,更為重要的是提供了一系列面向實戰的最佳實踐,可以作為廣大技術人員的開發指南。
在整個翻譯過程中,我們首先要感謝張春雨和顧慧芳編輯的辛苦工作,是你們的細心指導才讓本書得以最終呈現給讀者。其次要感謝我們的家人和朋友,沒有你們的體諒和關懷,我們無法專心致志工作。最后要感謝這段經歷,本書是我們首次嘗試以合譯的方式來完成的,當中充滿了樂趣和挑戰。
本書第1 章至第5 章是由鄭天民負責翻譯的,第6 章至第10 章是由汪佳南負責翻譯的。由于時間倉促,譯者水平和經驗有限,書中難免有欠妥和錯誤之處,懇請讀者批評指正。
鄭天民、汪佳南
2018 年3 月于杭州
序 言
當Manning Publications 于2012 年4 月發布《RabbitMQ 實戰》一書時,RabbitMQ 迅速普及。時至今日,RabbitMQ 已然成為消息代理服務器世界的領導者之一,并且是各種應用程序應用場景的理想之選。通過分布式應用程序助力通信,在面向服務體系結構中采用微服務,并實現CQRS 和事件源組件的邏輯分離,這都是一些常見的RabbitMQ 用法。通過對AMQP 協議結構的研究,對各種交換器的逐步探索,以及對性能方面的考察等事項,我們以全新的視角對RabbitMQ 本身進行深入探索。《深入RabbitMQ》一書旨在將你對RabbitMQ 的理解提升至新的水平,使你能在實際應用中進一步應用這些原理。
致 謝
本書寫作并非一蹴而就。首先要感謝我們的家人和朋友,他們孜孜不倦地陪伴在左右,毫無怨言,特別是傍晚的那些咖啡讓我們堅持不懈地編寫這樣一本書。再次說聲感謝!
感謝《RabbitMQ 實戰》(2012 年4 月由Manning Publications 出版) 的作者AlvaroVidela 和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 Perez alvarez、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 集成的方式。
輕松注冊成為博文視點社區用戶(www.broadview.com.cn),掃碼直達本書頁面。
● 下載資源:本書如提供示例代碼及資源文件,均可在下載資源處下載。
● 提交勘誤:您對書中內容的修改意見可在提交勘誤處提交,若被采納,將獲贈博文視點社區積分(在您購買電子書時,積分可用來抵扣相應金額)。
● 交流互動:在頁面下方讀者評論處留下您的疑問或觀點,與我們和其他讀者一同學習交流。
Gavin M. Roy 是一位積極的開源傳播者和倡導者,自20 世紀90 年代中期就一直活躍在互聯網和企業級技術之中。
關于封面
本書封面上的圖片為“來自克羅地亞斯里耶姆的Mikanovac 的男士”。該插圖摘自19世紀中期克羅地亞傳統服飾專輯。這幅出自Nikola Arsenovic 之手的作品于2003 年在克羅地亞斯普利特的民族博物館展出。這些插圖是從斯普利特民族博物館的一位樂于助人的圖書管理員手中獲得的。它位于鎮中心的中世紀羅馬核心:大約公元304 年左右羅馬皇帝退休后宮殿的廢墟,并伴有服飾和日常生活的描述。
著裝規范和生活方式在過去的200 年里歷經變化。當時如此豐富多彩的地區多樣性已不復存在。現在很難區分不同大陸的居民,更不用說不同的小村莊或僅隔幾英里的小鎮了。也許我們犧牲了文化多樣性換來了更加多樣化的個人生活。確切地說,換來的是更多樣化和快節奏的科技生活。Manning 將兩百年前區域生活的豐富多樣性作為書籍封面來慶祝計算機業務的發明和創造,而來自這類古老書籍和藏品的插圖讓封面重煥生機。
內容簡介:

本書對 RabbitMQ 這一業界主流的消息中間件做了全面介紹,給出了如何使用 RabbitMQ 構建消息通信系統的方法和實踐。本書從 AMQP 協議出發,深入介紹各種消息屬性,給出 RabbitMQ 在發送和消費消息上的特性和最佳實踐,并闡述基于 RabbitMQ 所特有的交換器組件實現靈活的消息路由機制。同時,本書也討論了如何利用 RabbitMQ 強大的集群機制實現分布式環境下的消息通信,并展示了如何在 RabbitMQ中,使用其他傳輸協議以及數據庫集成等功能來實現各種定制化需求。本書的讀者對象為從事互聯網行業中各種分布式和服務化系統開發的研究人員、高等院校計算機相關專業的研究生和本科生,以及廣大的 IT 愛好者。

目錄:

目 錄
第一篇 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
序: