為什么要寫這《分布式中間件技術(shù)實(shí)戰(zhàn)(Java版)》
互聯(lián)網(wǎng)、移動(dòng)互聯(lián)網(wǎng)時(shí)代的到來(lái),不僅給企業(yè)業(yè)務(wù)的擴(kuò)展帶來(lái)了巨大的挑戰(zhàn),同時(shí)也在某種層面上給開發(fā)者帶來(lái)了重大機(jī)遇。這一機(jī)遇主要是由具有高并發(fā)、高可用、高擴(kuò)展等功能特性的分布式系統(tǒng)架構(gòu)帶來(lái)的。然而,分布式系統(tǒng)架構(gòu)的構(gòu)建其實(shí)是一個(gè)相當(dāng)復(fù)雜的過(guò)程,在這個(gè)過(guò)程中毫無(wú)疑問(wèn)是需要有一系列的功能組件加以支撐的。其中,最為典型的當(dāng)屬中間件,它在構(gòu)建分布式系統(tǒng)架構(gòu)的過(guò)程中起到了至關(guān)重要的作用。因此,想要進(jìn)軍分布式系統(tǒng)架構(gòu)領(lǐng)域,學(xué)習(xí)并實(shí)戰(zhàn)分布式中間件的相關(guān)知識(shí),以及掌握其在實(shí)際典型業(yè)務(wù)場(chǎng)景中的使用,都是很有必要的。
目前,國(guó)內(nèi)圖書市場(chǎng)上關(guān)于Java中間件的圖書不少,但是真正從初學(xué)者的角度,基于實(shí)際項(xiàng)目,通過(guò)各種典型業(yè)務(wù)模塊和案例來(lái)指導(dǎo)讀者提高開發(fā)水平的圖書卻很少!斗植际街虚g件技術(shù)實(shí)戰(zhàn)(Java版)》便是以實(shí)戰(zhàn)為主,配合必要的理論知識(shí),介紹了幾款比較流行的分布式中間件,包括其理論層面的知識(shí)要點(diǎn)及在實(shí)際業(yè)務(wù)場(chǎng)景中的實(shí)戰(zhàn)過(guò)程,讓讀者幾乎可以從零開始一步一個(gè)腳印地學(xué)習(xí)Java企業(yè)級(jí)應(yīng)用開發(fā)的各種常用中間件,從而提高實(shí)際開發(fā)水平和項(xiàng)目實(shí)戰(zhàn)能力。
《分布式中間件技術(shù)實(shí)戰(zhàn)(Java版)》有何特色
1.詳解Java企業(yè)級(jí)應(yīng)用構(gòu)建所涉及的常用中間件
《分布式中間件技術(shù)實(shí)戰(zhàn)(Java版)》主要介紹了Java企業(yè)級(jí)應(yīng)用構(gòu)建所涉及的各種常見中間件,包括Redis、RabbitMQ、ZooKeeper和Redisson等,不僅介紹了其理論要點(diǎn),還介紹了其功能組件底層基礎(chǔ)架構(gòu)的執(zhí)行過(guò)程。
2.基于Spring Boot微服務(wù)框架作為實(shí)戰(zhàn)中間件的奠基
《分布式中間件技術(shù)實(shí)戰(zhàn)(Java版)》采用了目前比較流行的Spring Boot微框架作為實(shí)戰(zhàn)中間件的奠基,在整合中間件的相關(guān)依賴并實(shí)踐其相關(guān)功能組件時(shí),還介紹了Spring Boot、Spring MVC、MyBatis、Redis、RabbitMQ、ZooKeeper、Redisson和MySQL等熱門技術(shù)。
3.詳解實(shí)際生產(chǎn)環(huán)境中的各種典型應(yīng)用案例,實(shí)用性強(qiáng)
《分布式中間件技術(shù)實(shí)戰(zhàn)(Java版)》不僅以大量圖文相結(jié)合的方式介紹了相關(guān)中間件的理論知識(shí),而且還重點(diǎn)介紹了實(shí)際生產(chǎn)環(huán)境中各種中間件的典型應(yīng)用場(chǎng)景,并給出了實(shí)現(xiàn)代碼,有很強(qiáng)的實(shí)用性。而且這些中間件之間也相互獨(dú)立,開發(fā)人員可以作為手冊(cè)隨時(shí)查閱和參考。
4.案例典型,有較高的應(yīng)用價(jià)值
《分布式中間件技術(shù)實(shí)戰(zhàn)(Java版)》在介紹完每個(gè)中間件的理論要點(diǎn)后,都會(huì)介紹一個(gè)典型的業(yè)務(wù)場(chǎng)景,甚至以實(shí)際的應(yīng)用系統(tǒng)作為實(shí)戰(zhàn)案例。這些案例來(lái)源于作者所開發(fā)的實(shí)際項(xiàng)目,具有較高的應(yīng)用價(jià)值和參考性。而且這些案例分別使用不同的中間件實(shí)現(xiàn),便于讀者融會(huì)貫通地理解書中所講解的相關(guān)理論知識(shí)。
《分布式中間件技術(shù)實(shí)戰(zhàn)(Java版)》內(nèi)容及知識(shí)體系
第1篇 開發(fā)工具準(zhǔn)備
本篇包括第1、2章,主要介紹了分布式系統(tǒng)架構(gòu)的演進(jìn)歷程,并詳細(xì)介紹了分布式中間件的重要性,重點(diǎn)介紹了常見中間件的功能特性、作用及其典型應(yīng)用場(chǎng)景。除此之外,本篇還介紹了如何基于Spring Boot微服務(wù)框架搭建微服務(wù)項(xiàng)目,并系統(tǒng)地介紹了各種相關(guān)的開發(fā)工具。
第2篇 開發(fā)實(shí)戰(zhàn)
本篇包括第3~9章,是全書的核心,介紹了目前在構(gòu)建分布式系統(tǒng)架構(gòu)中經(jīng)常使用的典型分布式中間件,包括緩存中間件Redis、消息中間件RabbitMQ、統(tǒng)一協(xié)調(diào)管理中間件ZooKeeper、綜合中間件Redisson等。本篇在介紹完每個(gè)中間件的相關(guān)理論要點(diǎn)后,都給出了相應(yīng)中間件在實(shí)際應(yīng)用場(chǎng)景和業(yè)務(wù)模塊中的實(shí)戰(zhàn)案例,以充分鞏固和加深讀者對(duì)每個(gè)中間件的理解,從而提高實(shí)際的項(xiàng)目開發(fā)水平。
第3篇 總結(jié)
本篇包括第10章,對(duì)全書內(nèi)容做了總結(jié),并對(duì)核心篇章,特別是對(duì)實(shí)際應(yīng)用系統(tǒng)的設(shè)計(jì)、開發(fā)與實(shí)戰(zhàn)等章節(jié)做了重點(diǎn)回顧,并對(duì)讀者使用書中提供的樣例代碼提出了幾點(diǎn)建議。
配套資源獲取方式
《分布式中間件技術(shù)實(shí)戰(zhàn)(Java版)》涉及的源代碼文件及開發(fā)工具等配套資源需要讀者自行下載。請(qǐng)?jiān)谌A章公司的網(wǎng)站www.hzbook.com上搜索到本書,然后單擊資料下載按鈕,即可在本書頁(yè)面上找到配書資源下載鏈接,單擊該鏈接即可下載。另外,讀者也可以從Git倉(cāng)庫(kù)中下載這些資料,網(wǎng)址為https://gitee.com/steadyjack/middleware.git。
適合閱讀《分布式中間件技術(shù)實(shí)戰(zhàn)(Java版)》的讀者
? 需要全面學(xué)習(xí)分布式中間件技術(shù)的人員;
? Java和Java Web開發(fā)程序員;
? Java EE開發(fā)工程師;
? 希望提高項(xiàng)目開發(fā)水平的開發(fā)人員;
? 希望鞏固和提升開發(fā)水平的系統(tǒng)架構(gòu)師;
? 需要一本案頭必備查詢手冊(cè)的人員;
? 相關(guān)專業(yè)的高校學(xué)生和社會(huì)培訓(xùn)學(xué)員。
閱讀《分布式中間件技術(shù)實(shí)戰(zhàn)(Java版)》的建議
? 讀者需要有一定的Java編程基礎(chǔ)和Spring Boot微服務(wù)框架使用經(jīng)驗(yàn);
? 有Java EE框架使用經(jīng)驗(yàn)的讀者可以根據(jù)實(shí)際情況有重點(diǎn)地選擇閱讀各個(gè)中間件及其案例;
? 對(duì)于每個(gè)典型應(yīng)用場(chǎng)景的實(shí)戰(zhàn)案例,先自己思考一下實(shí)現(xiàn)的思路,然后再閱讀,學(xué)習(xí)效果更好;
? 先對(duì)各種中間件的應(yīng)用場(chǎng)景做必要的了解和學(xué)習(xí),然后再結(jié)合提供的案例源代碼進(jìn)行應(yīng)用實(shí)戰(zhàn),理解起來(lái)更加容易,也更加深刻。
《分布式中間件技術(shù)實(shí)戰(zhàn)(Java版)》作者
《分布式中間件技術(shù)實(shí)戰(zhàn)(Java版)》由鐘林森主筆編寫。作為一個(gè)Java后端工程師,作者曾任職于國(guó)內(nèi)某知名互聯(lián)網(wǎng)公司,擔(dān)任開發(fā)組長(zhǎng),并長(zhǎng)期活躍于CSDN和51CTO學(xué)院等技術(shù)社區(qū),寫作了大量原創(chuàng)博客,訪問(wèn)量達(dá)百萬(wàn)人次。作者還作為CSDN學(xué)院、網(wǎng)易云課堂等知名教育平臺(tái)的講師,授課學(xué)員超過(guò)萬(wàn)人。
……
第1篇 開發(fā)工具準(zhǔn)備
第1章 走進(jìn)分布式中間件 2
1.1 分布式系統(tǒng)概述 2
1.1.1 白話分布式系統(tǒng) 3
1.1.2 分布式系統(tǒng)發(fā)展歷程 3
1.1.3 分布式系統(tǒng)特性 6
1.1.4 分布式系統(tǒng)常見問(wèn)題 7
1.2 分布式中間件概述 7
1.2.1 白話分布式中間件 7
1.2.2 常見中間件介紹 8
1.3 本書核心知識(shí)要點(diǎn) 9
1.4 本書實(shí)戰(zhàn)要求與建議 10
第2章 搭建微服務(wù)項(xiàng)目 11
2.1 Spring Boot概述 11
2.1.1 什么是Spring Boot 11
2.1.2 Spring Boot的優(yōu)勢(shì) 12
2.1.3 Spring Boot的幾大特性 13
2.2 搭建規(guī)范與搭建流程 13
2.2.1 Spring Boot項(xiàng)目搭建規(guī)范 14
2.2.2 Spring Boot項(xiàng)目搭建流程 14
2.2.3 寫個(gè)Hello World吧 26
2.3 總結(jié) 28
第2篇 開發(fā)實(shí)戰(zhàn)
第3章 緩存中間件Redis 30
3.1 Redis概述與典型應(yīng)用場(chǎng)景介紹 30
3.2 Redis的使用 32
3.2.1 快速安裝Redis 32
3.2.2 在Windows環(huán)境下使用Redis 34
3.2.3 Spring Boot項(xiàng)目整合Redis 37
3.2.4 Redis自定義注入Bean組件配置 38
3.2.5 RedisTemplate實(shí)戰(zhàn) 39
3.2.6 StringRedisTemplate實(shí)戰(zhàn) 43
3.3 Redis常見數(shù)據(jù)結(jié)構(gòu)實(shí)戰(zhàn) 45
3.3.1 字符串 45
3.3.2 列表 47
3.3.3 集合 48
3.3.4 有序集合 50
3.3.5 哈希Hash存儲(chǔ) 52
3.3.6 Key失效與判斷是否存在 54
3.4 Redis實(shí)戰(zhàn)場(chǎng)景之緩存穿透 56
3.4.1 什么是緩存穿透 57
3.4.2 緩存穿透的解決方案 58
3.4.3 實(shí)戰(zhàn)過(guò)程 58
3.4.4 其他典型問(wèn)題介紹 65
3.5 總結(jié) 66
第4章 Redis典型應(yīng)用場(chǎng)景實(shí)戰(zhàn)之搶紅包系統(tǒng) 67
4.1 整體業(yè)務(wù)流程介紹 67
4.1.1 搶紅包系統(tǒng)業(yè)務(wù)流程 68
4.1.2 業(yè)務(wù)流程分析 68
4.1.3 業(yè)務(wù)模塊劃分 70
4.2 數(shù)據(jù)庫(kù)表設(shè)計(jì)與環(huán)境搭建 71
4.2.1 數(shù)據(jù)庫(kù)表設(shè)計(jì) 71
4.2.2 開發(fā)環(huán)境搭建 73
4.2.3 開發(fā)流程介紹 83
4.3 紅包金額隨機(jī)生成算法實(shí)戰(zhàn) 85
4.3.1 隨機(jī)數(shù)算法 86
4.3.2 紅包隨機(jī)金額生成算法要求 86
4.3.3 二倍均值法簡(jiǎn)介 87
4.3.4 紅包隨機(jī)金額生成算法實(shí)戰(zhàn) 88
4.3.5 紅包隨機(jī)金額生成算法自測(cè) 90
4.4 發(fā)紅包模塊實(shí)戰(zhàn) 91
4.4.1 業(yè)務(wù)模塊分析 92
4.4.2 整體流程實(shí)戰(zhàn) 93
4.4.3 業(yè)務(wù)模塊自測(cè) 99
4.5 搶紅包模塊實(shí)戰(zhàn) 101
4.5.1 業(yè)務(wù)模塊分析 101
4.5.2 整體流程 102
4.5.3 業(yè)務(wù)模塊自測(cè) 105
4.5.4 總結(jié) 109
4.6 Jmeter壓力測(cè)試高并發(fā)搶紅包 110
4.7 問(wèn)題分析與優(yōu)化方案 116
4.7.1 問(wèn)題分析 117
4.7.2 優(yōu)化方案介紹 118
4.7.3 優(yōu)化方案之Redis分布式鎖實(shí)戰(zhàn) 118
4.7.4 不足之處 122
4.8 總結(jié) 122
第5章 消息中間件RabbitMQ 124
5.1 RabbitMQ簡(jiǎn)介 124
5.1.1 認(rèn)識(shí)RabbitMQ 125
5.1.2 典型應(yīng)用場(chǎng)景介紹 126
5.1.3 RabbitMQ后端控制臺(tái)介紹 132
5.1.4 基于Spring的事件驅(qū)動(dòng)模型實(shí)戰(zhàn) 133
5.2 Spring Boot項(xiàng)目整合RabbitMQ 137
5.2.1 RabbitMQ相關(guān)詞匯介紹 138
5.2.2 Spring Boot項(xiàng)目整合RabbitMQ 139
5.2.3 自定義注入配置Bean相關(guān)組件 140
5.2.4 RabbitMQ發(fā)送、接收消息實(shí)戰(zhàn) 142
5.2.5 其他發(fā)送接收消息方式實(shí)戰(zhàn) 147
5.3 RabbitMQ多種消息模型實(shí)戰(zhàn) 152
5.3.1 基于FanoutExchange的消息模型實(shí)戰(zhàn) 152
5.3.2 基于DirectExchange的消息模型實(shí)戰(zhàn) 160
5.3.3 基于TopicExchange的消息模型實(shí)戰(zhàn) 165
5.4 RabbitMQ確認(rèn)消費(fèi)機(jī)制 171
5.4.1 消息高可用和確認(rèn)消費(fèi) 172
5.4.2 常見的確認(rèn)消費(fèi)模式介紹 174
5.4.3 基于自動(dòng)確認(rèn)消費(fèi)模式實(shí)戰(zhàn) 176
5.4.4 基于手動(dòng)確認(rèn)消費(fèi)模式實(shí)戰(zhàn) 182
5.5 典型應(yīng)用場(chǎng)景實(shí)戰(zhàn)之用戶登錄成功寫日志 188
5.5.1 整體業(yè)務(wù)流程介紹與分析 188
5.5.2 數(shù)據(jù)庫(kù)表設(shè)計(jì) 189
5.5.3 開發(fā)環(huán)境搭建 197
5.5.4 基于TopicExchange構(gòu)建日志消息模型 200
5.5.5 異步發(fā)送接收登錄日志消息實(shí)戰(zhàn) 201
5.5.6 整體業(yè)務(wù)模塊自測(cè)實(shí)戰(zhàn) 205
5.6 總結(jié) 208
第6章 死信隊(duì)列/延遲隊(duì)列實(shí)戰(zhàn) 209
6.1 死信隊(duì)列概述 209
6.1.1 死信隊(duì)列簡(jiǎn)介與作用 209
6.1.2 典型應(yīng)用場(chǎng)景介紹 212
6.2 RabbitMQ死信隊(duì)列實(shí)戰(zhàn) 213
6.2.1 死信隊(duì)列專有詞匯介紹 214
6.2.2 死信隊(duì)列消息模型實(shí)戰(zhàn) 215
6.2.3 死信隊(duì)列延遲發(fā)送消息實(shí)戰(zhàn) 221
6.3 典型應(yīng)用場(chǎng)景實(shí)戰(zhàn)之商城平臺(tái)訂單支付超時(shí) 226
6.3.1 整體業(yè)務(wù)場(chǎng)景介紹 227
6.3.2 整體業(yè)務(wù)流程分析 228
6.3.3 數(shù)據(jù)庫(kù)設(shè)計(jì) 229
6.3.4 構(gòu)建RabbitMQ死信隊(duì)列消息模型 236
6.3.5 Controller層開發(fā)用戶下單及訂單失效功能 240
6.3.6 用戶下單支付超時(shí)延遲發(fā)送接收實(shí)戰(zhàn) 246
6.3.7 用戶下單支付超時(shí)整體功能自測(cè) 250
6.4 總結(jié) 254
第7章 分布式鎖實(shí)戰(zhàn) 256
7.1 分布式鎖概述 256
7.1.1 鎖機(jī)制 257
7.1.2 分布式鎖登場(chǎng) 263
7.1.3 典型應(yīng)用場(chǎng)景介紹 265
7.1.4 小結(jié) 268
7.2 基于數(shù)據(jù)庫(kù)實(shí)現(xiàn)分布式鎖 268
7.2.1 樂(lè)觀鎖簡(jiǎn)介 268
7.2.2 樂(lè)觀鎖實(shí)戰(zhàn) 269
7.2.3 Jmeter高并發(fā)測(cè)試樂(lè)觀鎖 280
7.2.4 悲觀鎖簡(jiǎn)介 286
7.2.5 悲觀鎖實(shí)戰(zhàn) 288
7.2.6 Jmeter高并發(fā)測(cè)試悲觀鎖 290
7.2.7 小結(jié) 291
7.3 基于Redis實(shí)現(xiàn)分布式鎖 292
7.3.1 Redis溫故而知新 292
7.3.2 分布式鎖的實(shí)現(xiàn)流程與原理分析 294
7.3.3 基于Redis實(shí)戰(zhàn)實(shí)現(xiàn)分布式鎖 295
7.3.4 Jmeter高并發(fā)測(cè)試 303
7.3.5 小結(jié) 307
7.4 基于ZooKeeper實(shí)現(xiàn)分布式鎖 308
7.4.1 ZooKeeper簡(jiǎn)介與作用 308
7.4.2 分布式鎖的實(shí)現(xiàn)流程與原理分析 310
7.4.3 Spring Boot整合ZooKeeper 312
7.4.4 基于ZooKeeper實(shí)現(xiàn)分布式鎖 315
7.4.5 Jmeter高并發(fā)測(cè)試 317
7.4.6 小結(jié) 319
7.5 典型應(yīng)用場(chǎng)景之書籍搶購(gòu)模塊設(shè)計(jì)與實(shí)戰(zhàn) 319
7.5.1 整體業(yè)務(wù)流程介紹與分析 319
7.5.2 數(shù)據(jù)庫(kù)表設(shè)計(jì)與用例設(shè)計(jì) 321
7.5.3 書籍搶購(gòu)核心業(yè)務(wù)邏輯開發(fā)實(shí)戰(zhàn) 324
7.5.4 Jmeter重現(xiàn)庫(kù)存超賣的問(wèn)題 328
7.5.5 采用分布式鎖解決問(wèn)題 330
7.5.6 小結(jié) 334
7.6 總結(jié) 334
第8章 綜合中間件Redisson 336
8.1 Redisson概述 336
8.1.1 Redisson簡(jiǎn)介與作用 337
8.1.2 Redisson的功能特性 339
8.1.3 典型應(yīng)用場(chǎng)景之布隆過(guò)濾器與主題 340
8.1.4 典型應(yīng)用場(chǎng)景之延遲隊(duì)列與分布式鎖 345
8.1.5 Spring Boot整合Redisson 348
8.2 Redisson常見功能組件實(shí)戰(zhàn) 352
8.2.1 布隆過(guò)濾器 352
8.2.2 發(fā)布-訂閱式主題 355
8.2.3 數(shù)據(jù)結(jié)構(gòu)之映射Map 361
8.2.4 數(shù)據(jù)結(jié)構(gòu)之集合Set 366
8.2.5 隊(duì)列Queue實(shí)戰(zhàn) 370
8.2.6 延遲隊(duì)列Delayed Queue實(shí)戰(zhàn)1 374
8.2.7 延遲隊(duì)列Delayed Queue實(shí)戰(zhàn)2 381
8.3 分布式鎖實(shí)戰(zhàn) 385
8.3.1 重溫分布式鎖 385
8.3.2 分布式鎖之一次性鎖實(shí)戰(zhàn) 387
8.3.3 分布式鎖之可重入鎖實(shí)戰(zhàn) 392
8.4 總結(jié) 398
第9章 Redisson典型應(yīng)用場(chǎng)景實(shí)戰(zhàn)之高性能點(diǎn)贊 399
9.1 整體業(yè)務(wù)流程介紹與分析 399
9.1.1 業(yè)務(wù)背景介紹 400
9.1.2 業(yè)務(wù)流程介紹與分析 401
9.1.3 業(yè)務(wù)模塊劃分與數(shù)據(jù)庫(kù)設(shè)計(jì) 404
9.2 點(diǎn)贊與取消點(diǎn)贊操作模塊實(shí)戰(zhàn) 409
9.2.1 點(diǎn)贊與取消點(diǎn)贊業(yè)務(wù)流程分析 409
9.2.2 Controller層接收請(qǐng)求信息 412
9.2.3 Service層插入、更新并緩存記錄信息 415
9.2.4 業(yè)務(wù)模塊自測(cè) 421
9.3 排行榜業(yè)務(wù)模塊實(shí)戰(zhàn) 424
9.3.1 排行榜業(yè)務(wù)流程分析 425
9.3.2 接收前端請(qǐng)求并觸發(fā)緩存排行榜 426
9.3.3 業(yè)務(wù)模塊自測(cè) 428
9.4 總結(jié) 432
第3篇 總結(jié)
第10章 總結(jié)與回顧 434