企業級Java微服務實戰
內容描述
對於大型應用,如果能從小而簡單的組件起步,開發和維護就會變得更容易。
現在的Java開發者享有廣泛的支持微服務應用開發的工具,包括大小合適的應用服務,開源的框架,以及定義良好的模式。
重要的是,你可以使用已有的Java技能開發微服務應用。
《企業級Java微服務實戰》講授基於JVM的微服務應用的設計和構建。
首先通過與傳統的Java EE應用進行比較來學習微服務的設計。
作者Ken Finnigan以實用的角度介紹了全景的概念,以及用於實現它們的工具和技術。
你會探索微服務生態中的組件,比如用於容錯的Netflix Hystrix,並且掌握恰如其分的應用服務器(JeAS)的使用方法。
為了確保平穩的運維,還會研究監控、安全性、測試以及雲上的部署。
目錄大綱
第Ⅰ部分 微服務基礎
第1章 企業級Java微服務 3
1.1 企業級Java 簡史 3
1.1.1 什麼是企業級Java 4
1.1.2 典型的企業級Java架構 4
1.1.3 什麼是單體 7
1.1.4 與單體相關的問題有哪些 8
1.2 微服務和分佈式架構 9
1.2.1 只做好一件事 9
1.2.2 什麼是分佈式架構 10
1.2.3 為什麼要關心分佈式 11
1.2.4 可以做些什麼幫助開發微服務 13
1.2.5 項目產品 13
1.2.6 持續集成和持續交付 13
1.3 遷移至微服務的模式 14
1.3.1 領域驅動模式 14
1.3.2 大爆炸模式 16
1.3.3 絞殺者模式 16
1.3.4 混合模式 17
1.4 什麼是企業級Java微服務 18
1.5 本章小結 20
第2章 開發一個簡單的RESTful微服務 21
2.1 Cayambe單體 21
2.2 新管理站點 23
2.2.1 用例 25
2.2.2 應用的架構 25
2.2.3 使用JAX-RS創建RESTful端點 27
2.2.4 運行 30
2.3 本章小結 32
第3章 恰如其分的微服務應用服務器 33
3.1 恰如其分的應用服務器 33
3.1.1 什麼是JeAS 34
3.1.2 JeAS的優點 37
3.1.3 Eclipse MicroProfile 39
3.2 選擇恰如其分的應用服務器 40
3.2.1 海灘度假示例應用 40
3.2.2 Dropwizard——原始的有主見的微服務運行時 42
3.2.3 Payara Micro ——精簡到JAR中的Java EE應用服務器 45
3.2.4 Spring Boot——有主見的Spring微服務 48
3.2.5 Thorntail——最靈活的JeAS運行時 51
3.2.6 如何比較它們 53
3.3 本章小結 54
第4章 微服務的測試 55
4.1 需要哪些類型的測試 55
4.2 單元測試 56
4.3 什麼是不可變性 59
4.4 集成測試 60
4.5 消費者驅動的契約測試 68
4.6 額外的閱讀 75
4.7 額外的練習 76
4.8 本章小結 76
第5章 雲原生開發 77
5.1 雲到底是什麼 77
5.2 服務模型 78
5.3 雲原生開發 80
5.4 部署到雲 81
5.5 開始使用Minishift 82
5.6 微服務的雲部署 83
5.7 在雲中測試 87
5.8 額外練習 905.9 本章小結 91
第Ⅱ部分 實現企業級Java微服務
第6章 消費微服務 95
6.1 使用Java客戶端庫消費微服務 99
6.1.1 java.net 99
6.1.2 Apache HttpClient 102
6.2 使用JAX-RS客戶端庫消費微服務 103
6.2.1 JAX-RS客戶端 103
6.2.2 RESTEasy客戶端 106
6.3 本章小結 109
第7章 服務發現 111
7.1 為什麼微服務需要被發現 111
7.1.1 什麼是服務發現 112
7.1.2 服務發現和服務註冊中心有什麼好處 114
7.1.3 無狀態與有狀態的微服務 116
7.1.4 什麼是Netflix Ribbon 116
7.2 使用Thorntail註冊微服務 118
7.2.1 Thorntail的拓撲 118
7.2.2 使用拓撲註冊微服務 120
7.3 使用Thorntail消費已註冊的微服務 123
7.3.1 使用Netflix Ribbon進行服務查找 123
7.3.2 使用RESTEasy客戶端進行服務查找 127
7.4 本章小結 130
第8章 容錯和監控的策略 131
8.1 分佈式架構中的微服務故障 131
8.2 網絡故障 134
8.3 緩解故障 134
8.3.1 Hystrix是什麼 134
8.3.2 斷路器 137
8.3.3 隔艙 140
8.3.4 回退 142
8.3.5 請求緩存 143
8.3.6 綜合運用 144
8.3.7 Hystrix儀錶盤 146
8.4 把Hystrix添加到Payment微服務 148
8.4.1 使用Hystrix與RESTEasy客戶端 149
8.4.2 使用Hystrix與Ribbon客戶端 152
8.5 本章小結 153
第9章 微服務的安全 155
9.1 保護微服務的重要性 155
9.1.1 為什麼安全性很重要 155
9.1.2 安全性需要解決哪些問題 157
9.2 使用Keycloak 159
9.2.1 理解Keycloak的特性 159
9.2.2 設置Keycloak 159
9.3 保護Stripe微服務 163
9.3.1 配置Keycloak 163
9.3.2 保護Stripe資源 165
9.3.3 在Payment資源中進行身份驗證 167
9.3.4 測試受保護的微服務 168
9.4 捕獲用戶身份驗證 170
9.4.1 配置Keycloak 171
9.4.2 保護類別刪除 172
9.4.3 在UI中對用戶進行身份驗證 173
9.4.4 測試新UI和服務 176
9.5 本章小結 177
第10章 構建微服務混合體 179
10.1 Cayambe單體 179
10.2 運行Cayambe單體 181
10.2.1 配置數據庫 182
10.2.2 配置WildFly 182
10.2.3 運行Cayambe 184
10.3 Cayambe混合體 185
10.3.1 與Payment微服務集成 187
10.3.2 集成Admin微服務 192
10.3.3 新的管理UI 193
10.3.4 Cayambe混合體小結 193
10.4 部署到混合雲中 193
10.4.1 數據庫 194
10.4.2 安全性 196
10.4.3 微服務 197
10.4.4 Cayambe混合體 197
10.4.5 Cayambe EAR 199
10.4.6 管理UI 199
10.5 本章小結 199
第11章 使用Apache Kafka 201
11.1 Apache Kafka能做什麼 201
11.1.1 數據流 201
11.1.2 Apache Kafka 202
11.2 用數據流簡化單體架構 206
11.3 部署並使用Kafka來實現數據流 208
11.3.1 Openshift中的Kafka 208
11.3.2 Admin微服務 210
11.3.3 Kafka消費者 212
11.4 額外練習 216
11.5 本章小結 216
附錄A Spring Boot微服務 217
A.1 剖析Spring Boot項目 217
A.1.1 查看一個新初始化的Spring Boot項目 217
A.1.2 啟動Spring 218
A.1.3 測試Spring Boot應用 219
A.1.4 配置應用的屬性 220
A.2 Spring Boot啟動器依賴項 221
A.2.1 使用啟動器依賴項 221
A.2.2 指定基於方面的依賴項 222
A.2.3 重寫啟動器傳遞的依賴項 223
A.3 開發Spring Boot應用 225
A.3.1 專注於應用的功能 225
A.3.2 定義領域 225
A.3.3 定義資源庫接口 226
A.3.4 創建Web接口 227
A.4 Spring Boot測試 230
A.5 本附錄小結 233
作者介紹
Ken Finnigan
曾擔任全球各地企業的顧問和軟件工程師,具有超過20年的從業經驗。
他領導著Thorntail項目,該項目旨在讓使用Java和Java EE為雲開發微服務變得盡可能容易。
他曾擔任LiveOak和其他JBoss項目的項目負責人