《瘋狂Spring Cloud微服務架構實戰》以Spring Cloud為基礎,深入講解微服務開發的相關框架,包括服務管理框架Eureka、負載均衡框架Ribbon、服務客戶端Feign、容錯框架Hystrix、消息框架Stream等。除了介紹這些微服務相關的框架外,在本書的第11章,還介紹了如何使用Spring Data框架操作各個主流數據庫(MySQL、MongoDB、Redis)。在第12章,以一個案例為基礎結束本書內容,在該章中講解了模板引擎Thymeleaf,整本書將會為大家提供一整套微服務應用開發的解決方案。本書適合有一定Java開發基礎的技術人員,尤其是正在使用或準備使用微服務構建高并發、大數據應用的技術人員及團隊。
開源中國創始人@紅薯、Spring Cloud創始人許進、YY歡聚時代技術經理鐘永生聯合背書;
掃圖書封面二維碼可獲得圖書配套的講解視頻
作者親自在線的QQ群、微信群不定期答疑服務
瘋狂體系圖書的又一力作
序
Java語言經過多年的發展,從開始的EJB Servlet的開發模式,到后來的輕量級Java EE開發模式,每一種架構或開發模式的出現,都牽動著萬千程序員的心。程序員是一個求知若渴的群體,也是一個容易接受新知識的群體,為了學習新技術,多少人食不知味、夜不能寐。筆者有幸成為一名平凡的程序員,從業十余年,面對各種新技術,時常懷著一顆謙卑的心不停前進,只有學習,才能帶來快樂,才不會被淘汰。
筆者大約從2010年開始接手高并發、大數據的系統,經歷過項目重構、人肉運維等痛苦過程,深知項目架構之不易,一直以來,期望能構建出完美的系統。此次恰逢Spring Cloud的興起,筆者亦難以北窗高臥,數月以來寢食不安,編纂拙著。筆者學識淺薄,加之倉促付梓,書中錯漏定然難免,望讀者見諒。
IT行業人才輩出,筆者為平庸之輩,今日有幸與大家分享知識,實乃上天的眷顧。本書能得以出版,得益于多方襄助,對他們的感激之情,難以言表。感謝傳道并解惑的恩師,感謝聰穎而好學的讀者,感謝善良且親愛的家人,筆者會謝意永存、銘感不忘。
本書特點
筆者長期工作于企業的IT部門,有著豐富的企業應用開發經驗,因此本書具有以下特點。
1. 內容深入
從筆者接觸編程開始,就養成了查看源代碼的習慣,書中不僅僅講解Spring Cloud的功能,更深入Spring Cloud的原理。
2. 案例詳細
本書的每個知識點,幾乎都會對應一個案例。在本書最后,還附有一個完整的案例,讀者在該案例基礎上,可建立自己的項目。
衷心感謝
首先非常感謝李剛老師,一直以來,他既是我的老師,也是我的技術后盾,非常幸運人生能有這樣一位良師益友。
其次感謝出版社編輯,不辭辛苦地為我的書糾正各種錯誤,并為本書提出了許多寶貴的意見。
最后感謝我的家人,你們是我前進的動力。
本書寫給誰看
如果你有一定的Java語言基礎,進行過Web項目的開發,那么本書可以為你帶來一個全新的開發模式。如果你是一名系統設計師,本書可以讓你學習全新的系統架構。如果你是一名維護系統的程序員,即使本書的架構不適合你的系統,但本書的技術框架,仍然可以為你的系統改造和完善提供參考。
個人簡介
本人從事十多年的Java EE企業應用開發,曾任中企動力系統設計師、中企開源項目經理、數碼辰星科技公司項目經理,參與過多個企業級項目的設計與架構工作。曾負責辰星電影票網絡銷售系統的整體架構,精通Activiti、Drools、ESB等開源技術,在SOA、SaaS、大數據應用、互聯網系統架構方面有著豐富的經驗,曾出版《瘋狂Java實戰演義》《瘋狂Workflow講義》等書籍。
楊恩雄
2017年10月
讀者服務
輕松注冊成為博文視點社區用戶(www.broadview.com.cn),掃碼直達本書頁面。
? 下載資源:本書如提供示例代碼及資源文件,均可在下載資源處下載。
? 提交勘誤:您對書中內容的修改意見可在提交勘誤處提交,若被采納,將獲贈博文視點社區積分(在您購買電子書時,積分可用來抵扣相應金額)。
? 交流互動:在頁面下方讀者評論處留下您的疑問或觀點,與我們和其他讀者一同學習交流。
頁面入口:http://www.broadview.com.cn/33109
作者楊恩雄,從事十多年的Java EE企業應用開發,曾任中企動力系統設計師、中企開源項目經理、數碼辰星科技公司項目經理,參與過多個企業級項目的設計與架構工作。曾負責辰星電影票網絡銷售系統的整體架構,精通Activiti、Drools、ESB等開源技術,在SOA、SaaS、大數據應用、互聯網系統架構方面有著豐富的經驗,曾出版《瘋狂Java實戰演義》《瘋狂工作流講義》《瘋狂Spring Cloud微服務架構實戰》等書籍。
第1章 Spring Cloud概述1
1.1 傳統的應用2
1.1.1 單體應用2
1.1.2 架構演進3
1.1.3 架構要求4
1.2 微服務與Spring Cloud5
1.2.1 什么是微服務5
1.2.2 關于Netflix OSS6
1.2.3 Spring Cloud與Netflix6
1.2.4 Spring Cloud的主要模塊6
1.3 學習方面的準備工作7
1.3.1 下載本書的軟件及源碼7
1.3.2 導入本書的案例7
1.4 本章小結8
第2章 搭建開發環境9
2.1 安裝與配置Maven10
2.1.1 關于Maven10
2.1.2 下載與安裝Maven11
2.1.3 配置遠程倉庫11
2.2 安裝Eclipse12
2.2.1 Eclipse版本12
2.2.2 在Eclipse中配置Maven12
2.3 Spring Boot13
2.3.1 Spring Boot簡介13
2.3.2 新建Maven項目14
2.3.3 編寫啟動類15
2.3.4 編寫控制器16
2.3.5 發布REST WebService17
2.4 Spring Boot配置文件18
2.4.1 默認配置文件18
2.4.2 指定配置文件位置19
2.4.3 yml文件19
2.4.4 運行時指定profiles配置20
2.4.5 熱部署20
2.5 Spring Cloud的版本21
2.6 本章小結21
第3章 微服務發布與調用22
3.1 Eureka介紹23
3.1.1 關于Eureka23
3.1.2 Eureka架構23
3.1.3 服務器端24
3.1.4 服務提供者24
3.1.5 服務調用者24
3.2 第一個Eureka應用24
3.2.1 構建服務器24
3.2.2 服務器注冊開關27
3.2.3 編寫服務提供者27
3.2.4 編寫服務調用者29
3.2.5 程序結構32
3.3 Eureka集群搭建33
3.3.1 本例集群結構圖33
3.3.2 改造服務器端34
3.3.3 改造服務提供者35
3.3.4 改造服務調用者37
3.3.5 編寫REST客戶端進行測試37
3.4 服務實例的健康自檢38
3.4.1 程序結構39
3.4.2 使用Spring Boot Actuator39
3.4.3 實現應用健康自檢39
3.4.4 服務查詢42
3.5 Eureka的常用配置44
3.5.1 心跳檢測配置44
3.5.2 注冊表抓取間隔44
3.5.3 配置與使用元數據45
3.5.4 自我保護模式45
3.6 本章小結46
第4章 負載均衡47
4.1 Ribbon介紹48
4.1.1 Ribbon簡介48
4.1.2 Ribbon子模塊48
4.1.3 負載均衡器組件48
4.2 第一個Ribbon程序49
4.2.1 編寫服務49
4.2.2 編寫請求客戶端51
4.2.3 Ribbon的配置52
4.3 Ribbon的負載均衡機制53
4.3.1 負載均衡器53
4.3.2 自定義負載規則54
4.3.3 Ribbon自帶的負載規則56
4.3.4 Ping機制57
4.3.5 自定義Ping59
4.3.6 其他配置59
4.4 在Spring Cloud中使用Ribbon60
4.4.1 準備工作60
4.4.2 使用代碼配置Ribbon61
4.4.3 使用配置文件設置Ribbon63
4.4.4 Spring使用Ribbon的API64
4.5 RestTemplate負載均衡66
4.5.1 @LoadBalanced注解概述66
4.5.2 編寫自定義注解以及攔截器66
4.5.3 使用自定義攔截器以及注解68
4.5.4 在控制器中使用RestTemplate69
4.6 本章小結71
第5章 REST客戶端Feign72
5.1 REST客戶端73
5.1.1 使用CXF調用REST服務73
5.1.2 使用Restlet調用REST服務74
5.1.3 Feign框架介紹75
5.1.4 第一個Feign程序76
5.1.5 請求參數與返回對象77
5.2 使用Feign78
5.2.1 編碼器79
5.2.2 解碼器80
5.2.3 XML的編碼與解碼80
5.2.4 自定義編碼器與解碼器83
5.2.5 自定義Feign客戶端83
5.2.6 使用第三方注解85
5.2.7 Feign解析第三方注解86
5.2.8 請求攔截器89
5.2.9 接口日志89
5.3 在Spring Cloud中使用Feign90
5.3.1 Spring Cloud整合Feign91
5.3.2 Feign負載均衡93
5.3.3 默認配置93
5.3.4 自定義配置94
5.3.5 可選配置97
5.3.6 壓縮配置98
5.4 本章小結98
第6章 Spring Cloud的保護機制99
6.1 概述100
6.1.1 實際問題100
6.1.2 傳統的解決方式101
6.1.3 集群容錯框架Hystrix101
6.1.4 Hystrix的功能102
6.2 第一個Hystrix程序103
6.2.1 準備工作103
6.2.2 客戶端使用Hystrix103
6.2.3 調用錯誤服務105
6.2.4 Hystrix的運作流程106
6.3 Hystrix的使用108
6.3.1 命令執行108
6.3.2 屬性配置110
6.3.3 回退111
6.3.4 回退的模式112
6.3.5 斷路器開啟113
6.3.6 斷路器關閉116
6.3.7 隔離機制118
6.3.8 合并請求121
6.3.9 請求緩存125
6.4 在Spring Cloud中使用Hystrix127
6.4.1 整合Hystrix128
6.4.2 命令配置130
6.4.3 默認配置131
6.4.4 緩存注解132
6.4.5 合并請求注解134
6.4.6 Feign與Hystrix整合136
6.4.7 Hystrix監控140
6.5 本章小結142
第7章 微服務集群網關143
7.1 Zuul框架介紹144
7.1.1 關于Zuul144
7.1.2 Zuul的功能144
7.2 在Web項目中使用Zuul145
7.2.1 Web項目整合Zuul145
7.2.2 測試路由功能145
7.2.3 過濾器運行機制147
7.3 在微服務集群中初試Zuul148
7.3.1 集群搭建149
7.3.2 路由到集群服務150
7.3.3 Zuul Http客戶端153
7.4 路由配置153
7.4.1 簡單路由154
7.4.2 跳轉路由155
7.4.3 Ribbon路由155
7.4.4 自定義路由規則156
7.4.5 忽略路由157
7.5 Zuul的其他配置157
7.5.1 請求頭配置157
7.5.2 路由端點158
7.5.3 Zuul與Hystrix158
7.5.4 在Zuul中預加載Ribbon161
7.6 Zuul功能進階161
7.6.1 過濾器優先級161
7.6.2 自定義過濾器162
7.6.3 動態加載過濾器163
7.6.4 禁用過濾器165
7.6.5 請求上下文166
7.6.6 @EnableZuulServer注解168
7.6.7 error過濾器169
7.6.8 動態路由171
7.7 本章小結172
第8章 微服務與消息驅動173
8.1 Spring Cloud Stream介紹174
8.1.1 關于Stream框架174
8.1.2 Stream框架的組成部分174
8.1.3 消息代理中間件174
8.2 RabbitMQ框架175
8.2.1 RabbitMQ和AMQP175
8.2.2 下載與運行176
8.2.3 編寫生產者177
8.2.4 編寫消費者179
8.2.5 交換器、綁定與隊列180
8.3 Apache Kafka框架181
8.3.1 關于Kafka181
8.3.2 運行Kafka服務器182
8.3.3 編寫生產者182
8.3.4 編寫消費者184
8.3.5 消費者組185
8.4 開發消息微服務185
8.4.1 準備工作186
8.4.2 編寫生產者187
8.4.3 編寫消費者188
8.4.4 更換綁定器189
8.4.5 Sink、Source與Processor190
8.4.6 消費者組191
8.5 本章小結192
第9章 集群配置中心193
9.1 概述194
9.1.1 關于Spring Cloud Config194
9.1.2 應用結構195
9.1.3 引導程序簡介195
9.1.4 搭建SVN環境196
9.2 構建第一個例子196
9.2.1 創建服務器196
9.2.2 配置SVN倉庫197
9.2.3 創建客戶端199
9.2.4 從客戶端讀取SVN配置200
9.2.5 目錄配置總結201
9.2.6 刷新配置202
9.2.7 刷新Bean203
9.3 配置的加密和解密205
9.3.1 為服務器安裝JCE205
9.3.2 加密和解密端點205
9.3.3 SVN存儲加密數據206
9.3.4 非對稱加密207
9.4 其他配置207
9.4.1 服務器健康指示器207
9.4.2 客戶端的錯誤提前與重試機制208
9.4.3 安全配置209
9.4.4 訪問服務器配置210
9.5 整合使用210
9.5.1 準備工作210
9.5.2 配置服務器、客戶端整合Eureka212
9.5.3 整合Zuul214
9.5.4 整合Spring Cloud Bus刷新配置216
9.5.5 刷新單個節點配置217
9.6 本章小結217
第10章 微服務跟蹤219
10.1 概述220
10.1.1 實際問題與Sleuth220
10.1.2 服務跟蹤系統220
10.1.3 Sleuth的基本概念220
10.1.4 項目準備221
10.2 Sleuth整合Zipkin222
10.2.1 Zipkin簡介222
10.2.2 構建Zipkin服務器項目223
10.2.3 配置微服務224
10.2.4 查看數據225
10.2.5 使用MySQL保存數據228
10.2.6 使用消息采集數據230
10.3 Sleuth整合ELK232
10.3.1 關于ELK232
10.3.2 下載ELK233
10.3.3 運行Elasticsearch233
10.3.4 使用Logstash讀取JSON234
10.3.5 使用Kibana展示數據235
10.3.6 使用Logback轉換JSON237
10.4 本章小結240
第11章 微服務數據庫實戰241
11.1 概述242
11.1.1 關于Spring Data242
11.1.2 Spring Data的功能243
11.1.3 Spring Data的模塊243
11.2 Spring Data與JPA243
11.2.1 構建項目244
11.2.2 數據訪問層與業務層245
11.2.3 自定義數據存儲邏輯247
11.2.4 方法名查詢248
11.2.5 使用@Query注解249
11.3 Spring Data與MongoDB250
11.3.1 安裝MongoDB250
11.3.2 配置權限251
11.3.3 MongoDB的概念252
11.3.4 構建項目252
11.3.5 數據訪問層與業務層253
11.3.6 自定義數據存儲邏輯254
11.3.7 方法名查詢256
11.3.8 使用@Query注解258
11.4 Spring Data與Redis258
11.4.1 Redis的安裝與配置258
11.4.2 Redis的數據類型259
11.4.3 使用Jedis260
11.4.4 構建Spring Data項目262
11.4.5 數據訪問層與業務層263
11.4.6 自定義數據存儲邏輯265
11.4.7 方法名查詢267
11.5 本章小結268
第12章 案例實戰269
12.1 概述270
12.1.1 表現層技術270
12.1.2 案例概述270
12.1.3 案例技