描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302542681
对于大型应用,如果能从小而简单的组件起步,开发和维护就会变得更容易。现在的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 额外练习 90
5.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
序 言
自从我在红帽系统上开始开发企业级Java微服务,我就知道这是一个非常重要的在开发者社区传播更广的话题。许多有用的信息会像流行语一样消逝,因而需要一本书来呈现这些信息以帮助开发者完成他们的工作。
我真诚地希望《企业级Java微服务实战》能成功地将目前的企业级Java开发者从传统应用开发转到开发微服务。这通常不是一条轻松的路线,因为从传统应用开发到开发微服务需要不同的编程习惯。本书的初衷是提供初步知识,帮助你了解微服务。
关 于 本 书
在过去的七八年里,“微服务”的使用有了爆发式的增长,但开发者总是不能更好地理解它的含义。在这段时间的后半部分,开发者已经开始寻求将现有的企业级Java知识带入微服务中,但不一定都能成功。《企业级Java微服务实战》的编写目标是帮助现有的企业级Java开发者弥补传统应用开发和微服务之间的差距。
由于我的部分工作在红帽(Red Hat),我亲眼目睹了微服务的爆发式增长。它的爆发是我和同事在2015年成立WildFly Swarm项目的一个促成因素。我们看到了具有现存企业级Java知识的开发者对创建微服务的需求,当时我们没有关注Java EE领域,而是创建了WildFly Swarm。从那时起,微服务发生了很大的变化,而当前的微服务环境恍如隔世。
自从我开始编写《企业级Java微服务实战》,企业级Java的变化一直在迅速发生。我已经尽我所能,随着这些变化的发生努力更新本书。
应该注意的是,受篇幅限制,本书并不打算深入研究微服务开发的所有方面。在适当的情况下,如果你选择更详细地研究某个特定主题,本书将提供附加阅读的链接。
本书读者对象
本书适用于具有至少四年经验的企业级Java开发者。这些开发者可能具有微服务的基本知识,甚至可能使用Node.js或其他非企业级Java技术尝试过微服务,但还没有学会开发企业级Java微服务。
本书的结构:路线图
本书包含两部分:第Ⅰ部分,从第1章到第5章,讨论了微服务和分布式系统的总体架构,以及精简应用服务器的概念、测试和云原生开发。第Ⅱ部分深入研究了微服务开发的一些细节,如服务注册、容错和安全性。
第1章介绍企业级Java微服务——什么是单体应用,以及它是如何出现的。然后介绍分布式架构和微服务:它们是什么,术语的含义,以及与切换到微服务密切相关的其他流程。最后,介绍从单体应用迁移到微服务的一些模式,以及应用它们的时机。
第2章通过开发RESTful端点介绍微服务,这些端点用来管理一个购物网站的类别。还介绍Cayambe单体,它将贯穿整本书,会被转换成一个混合体,并拥有额外的微服务。
第3章介绍恰如其分的微服务应用服务器(Just enough Application Server,JeAS)运行时的概念,并展示了支持此类运行时的框架之间的差异。
第4章介绍在开发微服务时,单元测试和集成测试的不同之处,以及使测试更容易的可用工具。该章还介绍消费者驱动的契约测试的新概念,这对于包含许多微服务进行协作和通信的架构的成功至关重要。
第5章讨论云以及不同云环境中使用的不同服务模型。我们还将讨论云原生开发,以及它如何适应微服务的世界。接着使用可用的工具进行本地云开发,你将看到如何使用这些工具进行测试。
第6章讨论可用于消费外部微服务的库,以及它们提供的抽象层次。在研究抽象层次更高的库(如JAX-RS和RESTEasy客户端)之前,我们将介绍底层库,如java.net和Apache HttpClient。
第7章扩展第6章,为微服务添加了必要的部分,使其能够发现它们希望消费什么。如果不能注册或发现微服务,就无法可靠地使用它。
第8章深入讨论分布式体系结构和微服务的一个关键主题——故障以及如何减轻故障。我们简要介绍微服务可能遇到的典型故障类型,然后介绍Hystrix框架的各个部分如何为微服务提供一种方法,来解决可能出现的故障。
第9章讨论微服务的安全性,以及如何通过Keycloak实现安全性。该章涵盖的内容包含从保护微服务所需的内容,到在微服务中检索令牌以调用受保护的微服务,最后,在UI中验证用户已使用受保护的微服务。
第10章回顾Cayambe单体,展示如何以未修改的形式运行它。然后,通过一些步骤将Cayambe转换为一个混合体,该系统具有独立的部分,但也需要使用微服务来扩展和分发其功能。
第11章通过减少混合体和微服务之间的数据重复,介绍使用Apache Kafka实现数据流的主题。你将使用数据流来支持对不同数据的实时更新,从而简化分布式体系结构。
关于代码
本书中的所有代码都可以在附带的源代码文件中找到。源代码可以从Manning网站( www.manning.com/books/enterprise-java-microservices )免费下载,也可以从下面的GitHub存储库下载:https://github.com/kenfinnigan/ ejm-samples。所有示例代码都是由一系列Maven 模块构成的,这些模块分别对应于一章或一章的一部分。也可扫描封底二维码获取本书源代码。
图书论坛
购买的《企业级Java微服务实战》还有Manning Publications运行的一个私有Web论坛的访问权限。你可以在该论坛上对该书发表评论,询问技术问题,并从作者和其他用户那里获得帮助。论坛请访问https://forums.manning.com/forums/ java-microservices-in-action。你也可以通过https:/forums.manning.com/forums/about了解Manning的论坛和行为准则。
Manning 对读者的承诺是提供一个平台,让读者之间、读者和作者之间进行有意义的对话。作者对论坛的贡献仍然是自愿的(而且是无偿的),因此这并不是对其参与多少的承诺。我们建议你试着问作者一些有挑战性的问题,以免他失去兴趣。只要该书出版,论坛和以前讨论的归档就可以从出版商的网站上访问。
评论
还没有评论。