新書推薦:
《
日子慢慢向前,事事慢慢如愿
》
售價:NT$
254.0
《
场景供应链金融:将风口变成蓝海
》
售價:NT$
509.0
《
汗青堂丛书146·布鲁克王朝:一个英国家族在东南亚的百年统治
》
售價:NT$
418.0
《
人生是旷野啊
》
售價:NT$
332.0
《
甲骨文丛书· “安国之道”:英国的殖民情报系统及其在亚洲的扩张
》
售價:NT$
403.0
《
台北人(2024版)
》
售價:NT$
398.0
《
万千心理·成人情绪障碍跨诊断治疗的统一方案:应用实例
》
售價:NT$
602.0
《
让孩子更有力量:赋权型家庭教育指南
》
售價:NT$
305.0
編輯推薦:
本书全程案例教学。通过Spring Cloud Alibaba开发案例深入讲解微服务开发中目前最流行的组件和各种框架的用法,帮助读者快速掌握微服务开发技能,快速搭建出可应用的微服务架构。
全程技术引导。新手小白的问题引导和技术专家的点睛答疑贯穿全书,把看似深奥复杂的分布式微服务系统如庖丁解牛般解析得浅显易懂。
本书配备19小时同步视频教学课程。读者使用手机微信扫一扫书中二维码,可以随时随地观看同步教学视频。
本书适合具有Java编程基础的开发人员和在校学生,也适合微服务开发运营者、企业IT团队、Spring Cloud Alibaba技术爱好者学习参考。对于不熟悉Java编程的读者,通过阅读本书,也能够了解Spring Cloud Alibaba框架的基本用法和微服务开发的核心思想。
內容簡介:
本书以技术新手阿云的巧妙提问和答主的点睛指导为引线,以Spring Cloud Alibaba微服务开发框架
为脉络,带领读者全面系统地探索Spring Cloud Alibaba微服务开发过程中应用到的技术和解决方案。
本书技术包含了各种组件及框架的用法,包括注册和配置中心Nacos、负载均衡器LoadBalancer、远程
调用组件OpenFeign、远程调用框架Dubbo、流量控制组件Sentinel、网关组件GateWay、消息驱动框架
Stream及消息中间件RocketMQ、链路追踪组件SkyWalking、分布式事务管理框架Seata、分库分表中间件
ShardingSphere、分布式缓存数据库Redis、分布式任务调度框架XXL-JOB。
技术新手阿云在开发过程中的巧妙提问,能够激发读者主动学习的兴趣;而答主的巧妙解答和本书知
识结构的设计,把看似深奥复杂的分布式微服务系统如庖丁解牛般解析得浅显易懂。本书不仅详细介绍了
各种组件及框架技术的使用步骤,而且运用了许多生动形象的生活化比喻,帮助读者理解这些技术的运作
原理。
本书中的范例具有实用性,整合了Spring Boot、Spring Cloud Alibaba、Hibernate、Mybatis、
DruidDataSource、HikariDataSource、lombok软件包、SLF4J等流行的框架或工具软件。
本书主要面向具有Java编程基础的开发人员和在校学生。对于不熟悉Java编程的读者,通过阅读本
书,也能了解Spring Cloud Alibaba框架的基本用法和微服务开发的核心思想。本书还可作为高校和企业的
微服务开发教材。
關於作者:
孙卫琴,知名IT作家和Java专家,毕业于上海交通大学,随后主要从事软件开发工作,擅长Java软件研发和架构设计,还从事Java方面的培训和咨询工作。2002年开始Java技术领域的创作,文风清晰严谨、深入浅出,深受读者欢迎,其多部作品在同类书籍中经常位居全国畅销排行榜的榜首。
目錄 :
第1 章 微服务简介 1
1.1微服务的概念与特征 1
1.1.1微服务按照业务进行划分 1
1.1.2微服务运行在独立的进程中 2
1.1.3微服务采用简单协议通信 2
1.1.4微服务采用统一的管理框架 3
1.2Spring Cloud框架概述 4
1.3Spring Cloud Alibaba框架概述 5
1.4各种软件的版本匹配 6
1.5搭建微服务的开发和运行环境 7
1.5.1安装Intellij IDEA 7
1.5.2为IDEA配置Maven 7
1.5.3安装和启动Nacos服务器 8
1.5.4访问Nacos服务器的管理平台 9
1.5.5查看Nacos服务器的日志 10
1.6云原生的概念 10
1.7 小结 11
第2 章 范例:helloapp项目 12
2.1提供者和消费者的通信及实现原理 12
2.2在IDEA中创建helloapp项目 13
2.3创建hello-provider模块 14
2.3.1在IDEA中创建hello-provider 模块 14
2.3.2在pom.xml文件中添加Spring Cloud Alibaba依赖 15
2.3.3创建控制器类
HelloProviderController 19
2.3.4在application.properties文件中配置微服务 20
2.3.5启动hello-provider模块 20
2.4创建hello-consumer模块 21
2.4.1在IDEA中创建hello-consumer 模块 21
2.4.2在启动类中加入@EnableFeignClients注解 23
2.4.3创建HelloFeignService接口 23
2.4.4创建控制器类HelloConsumerController 24
2.4.5在application.properties文件中配置微服务 25
2.4.6启动和访问hello-consumer 模块 25
2.4.7HelloFeignService接口的默认方法 26
2.5启动微服务的多个实例 26
2.6LoadBalancer负载均衡器 29
2.7通过RestTemplate类访问微服务 30
2.7.1使用LoadBalancerClient接口整合 31
2.7.2使用@LoadBalanced注解整合 32
2 .8 小结 33
第3 章 微服务的注册与发现 34
3.1Nacos Discovery组件的配置属性 35
3.1.1禁止注册微服务 36
3.1.2Nacos Discovery组件的客户端缓存 37
3.1.3微服务的分组和命名空间 37
3.2微服务的健康检测 38
3.2.1微服务的临时实例 39
3.2.2微服务的永久实例 39
3.3访问DiscoveryClient接口 40
3.4通过Actuator监控Nacos Discovery组件的端点 42
3.5Nacos Discovery组件对微服务列表的监控 43
3.6 小结 44
第4 章 Nacos服务器配置中心 45
4.1在Nacos服务器中创建配置属性 46
4.2在微服务中读取配置属性 47
4.2.1创建bootstrap.properties配置文件 47
4.2.2Nacos Config组件的配置属性 48
4.2.3通过Environment对象读取配置属性 49
4.2.4通过@Value注解读取配置属性 50
4.2.5通过@ConfigurationProperties 注解读取配置属性 51
4.3配置单元的Data ID、分组和命名空间 52
4.4配置属性的动态更新 54
4.5不同环境下配置属性的切换 54
4.6扩展的配置单元 56
4.7监控Nacos Config组件的端点 58
4.8设置YAML格式的配置属性 60
4.9配置属性的持久化 60
4.10配置属性的回滚 62
4.11 小结 64
第5 章 Nacos集群 65
5.1Nacos集群的Raft算法 65
5.1.1节点之间数据的同步 66
5.1.2节点的选举机制 66
5.2搭建Nacos集群 67
5.2.1配置Nacos节点 68
5.2.2启动Nacos节点 69
5.2.3避免Nacos节点之间的端口冲突 69
5.2.4Nacos集群的选举 69
5.2.5通过微服务访问Nacos集群 71
5.2.6Nacos集群的同步 71
5.3Nacos集群的AP和CP运行模式 72
5.4使用Nginx反向代理服务器 73
5.5通过Keepalived建立Nginx集群 76
5.6 小结 80
第6 章 远程调用组件:OpenFeign 81
6.1优化设定所访问的微服务的名字 81
6.2优化设定映射URL的根路径 82
6.3输出详细日志 83
6.4请求数据和响应数据的压缩 84
6.5超时配置 85
6.6异常处理 87
6.6.1OpenFeign与Sentinel的整合 87
6.6.2创建回调类 87
6.6.3创建回调类和工厂类 89
6.7传递对象参数 91
6.7.1传递简单对象 92
6.7.2传递复杂对象 93
6.8 小结 94
第7 章 远程调用框架:Dubbo 95
7.1比较Dubbo和OpenFeign 95
7.2创建采用Dubbo框架的范例 96
7.2.1创建hello-provider模块 96
7.2.2创建hello-consumer模块... 100
7.2.3消费者远程访问提供者 101
7.3超时时间和重试次数设置 102
7.4异常处理 104
7.5传递复杂对象类型数据 104
7.6负载均衡 106
7.7Dubbo与Sentinel的整合 108
7.8提供者回调消费者 111
7.9消费者异步调用提供者的服务方法 115
7.10 小结 117
第8 章 流量控制组件:Sentinel 118
8.1微服务容错的基本原理 118
8.2微服务与Sentinel的整合 121
8.2.1hello-consumer模块与Sentinel的整合 121
8.2.2安装Sentinel控制台 122
8.2.3在Sentinel控制台中查看微服务的流量 123
8.3流控规则 124
8.3.1流控模式 125
8.3.2流控效果 127
8.4熔断规则 128
8.4.1慢调用比例 129
8.4.2异常比例 129
8.4.3 异常数 130
8.5系统规则 131
8.6授权规则 132
8.7@SentinelResource注解 133
8.7.1热点规则 133
8.7.2请求被拒绝的处理方式 135
8.7.3对异常的处理 136
8.8自定义处理BlockException异常的方式 138
8.9集群流控 140
8.9.1集群流控的原理 140
8.9.2Token Server的部署模式 141
8.9.3配置集群流控 142
8.10Sentinel规则的持久化 146
8.10.1流控规则的持久化 146
8.10.2熔断规则的持久化 148
8.10.3系统规则的持久化 150
8.11 小结 151
第9 章 网关组件:GateWay 152
9.1GateWay简介 152
9.2创建网关服务模块 153
9.3GateWay与Nacos的整合 155
9.4 断言 157
9.4.1内置的断言工厂类 157
9.4.2自定义断言工厂类 159
9.5 过 滤器 162
9.5.1局部内置过滤器 163
9.5.2默认过滤器 167
9.5.3全局内置过滤器 167
9.5.4自定义局部过滤器 168
9.5.5自定义全局过滤器 170
9.5.6SLF4J日志工具 171
9.6GateWay与Sentinel的整合 172
9.6.1对路由限流 174
9.6.2对自定义的API入口限流 175
9.6.3同时对路由和API入口限流 178
9.7跨域配置 180
9.8超时配置 181
9.9通过Actuator监控网关 182
9.10网关集群 183
9.11 小结 185
第10 章 消息驱动框架:Stream 186
10.1消息中间件简介 187
10.1.1消息中间件的运用场景 187
10.1.2消息中间件的缺点 189
10.1.3消息中间件产品 189
10.2RocketMQ简介 190
10.2.1RocketMQ涉及的基本概念 191
10.2.2RocketMQ的消息收发模型 191
10.2.3安装和启动RocketMQ 192
10.2.4安装和启动RocketMQ控制台 193
10.3搭建RocketMQ集群 194
10.3.1搭建NameServer集群 195
10.3.2搭建BrokerServer集群 195
10.3.3多Master模式 197
10.3.4多Master多Slave的异步复制模式 198
10.3.5多Master多Slave的同步双写模式 199
10.4Spring Cloud Stream简介 200
10.5在微服务中收发消息 200
10.5.1创建消息生产者 201
10.5.2创建消息消费者 202
10.5.3运行消息生产者和消息消费者 203
10.5.4收发Message类型的消息 203
10.6通过StreamBridge类发送消息 205
10.6.1StreamBridge类的用法 205
10.6.2用ChannelInterceptor拦截消息 207
10.7发送HTTP请求正文 208
10.8通过Function函数式接口收发消息 209
10.9响应式收发消息 210
10.10多输入通道和输出通道 211
10.11批量消费消息 213
10.12批量生产消息 213
10.13处理错误 214
10.13.1清除失败消息 214
10.13.2把失败消息发送到DLQ 214
10.13.3尝试重新消费失败消息... 215 10.14 消费者分组和分区 217
10.15消息正文的类型转换 219
10.16通过Actuator监控Stream 221
10.17 小结 222
第11 章 链路追踪组件:SkyWalking 223
11.1SkyWalking简介 223
11.2链路追踪软件 224
11.3安装和运行SkyWalking 225
11.4在微服务中安置探针 227
11.4.1查看拓扑图 229
11.4.2追踪链路 229
11.4.3查看监控数据 230
11.4.4性能分析 230
11.5采集日志 232
11.6自定义链路追踪 235
11.7忽略端点 237
11.8 告警 238
11.8.1编写满足告警规则的方法 240
11.8.2创建处理告警的webhook 241
11.8.3测试告警 243
11.9整合Elasticsearch数据库 245
11.10整合MySQL数据库 247
11.11通过Nacos建立SkyWalking集群 247
11.12 小结 250
第12 章 分布式事务管理框架:Seata 251
12.1分布式事务概述 251
12.2Seata简介 253
12.3Seata的事务模式 254
12.3.1AT 模式 255
12.3.2TCC 模式 261
12.3.3Saga 模式 262
12.3.4XA 模式 262
12.4安装和运行Seata Server 263
12.5创建AT模式下的范例 265
12.5.1创建Seata Server的MySQL 存储源 266
12.5.2处理分布式事务的微服务的架构 267
12.5.3创建order-service微服务 268
12.5.4声明全局事务和分支事务 276
12.5.5演示全局事务的提交和撤销 276
12.6搭建与Nacos整合的Seata Server集群 278
12.6.1在MySQL中创建seata数据库和表 279
12.6.2在Nacos配置中心配置Seata Server 279
12.6.3在Seata Server的配置文件中配置Nacos 280
12.6.4在微服务中配置Seata 282
12.6.5运行和访问Seata Server集群 282
12.7事务组与Seata Server集群的映射 283
12.8 小结 284
第13 章 分库分表中间件:ShardingSphere 285
13.1分库分表概述 286
13.2ShardingSphere简介 288
13.2.1Sharding-JDBC简介 289
13.2.2Sharding-Proxy简介 290
13.3ShardingSphere的核心概念 290
13.3.1与表相关的概念 290
13.3.2与分片相关的概念 291
13.4ShardingSphere的工作流程 293
13.5ShardingSphere的SQL规范 294
13.6运用Sharding-JDBC的范例 296
13.6.1加入Sharding-JDBC等的依赖 296
13.6.2创建拆分后的订单表 297
13.6.3配置Sharding-JDBC 和MyBatis 298
13.6.4创建Order实体类 299
13.6.5创建访问数据的OrderDao接口 299
13.6.6创建OrderService类 300
13.6.7创建OrderController类 300
13.6.8运行演示SQL路由的范例 301
13.6.9把订单表拆分到两个数据库中 301
13.6.10配置绑定表 303
13.6.11配置广播表 304
13.6.12主从数据库和读写分离 305
13.7Sharding-Proxy简介 307
13.7.1安装和配置Sharding-Proxy 308
13.7.2在微服务中访问Sharding-Proxy 311
13.7.3配置读写分离 312
13.7.4配置数据加密 314
13.7.5配置影子数据源 316
13.8 小结 318
第14 章 分布式缓存数据库:Redis 319
14.1Redis简介 319
14.2安装和启动Redis 320
14.3在微服务中访问Redis 321
14.4Redis数据类型 322
14.4.1读写list类型数据 323
14.4.2读写set类型数据 324
14.4.3读写zset类型数据 326
14.4.4读写hash类型数据 327
14.4.5序列化Java对象 328
14.5Redis集群 329
14.5.1主从模式 329
14.5.2哨兵模式 330
14.5.3集群模式 331
14.5.4搭建Redis集群 332
14.6在微服务中访问Redis集群 334
14.7 小结 334
第15 章 分布式任务调度框架:XXL-JOB 336
15.1安装和运行XXL-JOB 337
15.1.1创建XXL-JOB的数据库 337
15.1.2配置XXL-JOB调度中心 338
15.1.3运行和访问XXL-JOB调度 中心 339
15.1.4配置XXL-JOB执行器 340
15.1.5运行XXL-JOB执行器 342
15.2创建和执行GLUE模式的任务 342
15.3创建和执行BEAN模式的任务 346
15.3.1任务的初始化和销毁 347
15.3.2带参数的任务 348
15.4执行器集群和分片执行任务 352
15.5搭建调度中心的集群 354
15.6 小结 356
內容試閱 :
在传统的 Web 应用中,只用一台 Web 服务器响应各种各样的客户请求。熟悉 Java Web 开发技术的软件工程师阿云在这种 Web 服务器中开发了一个购物网站,如图 1 所示。该购物网站被应用发布到 Web 服务器中后,很多客户通过浏览器访问购物网站,浏览器与购物网站之间通过 HTTP(超文本传输协议)进行通信。
随着该购物网站的蓬勃发展,每日访问量由最初的数千人增加到数百万人。为了保证快速响应每个客户的请求,购物网站与时俱进地改进其软件和硬件,如优化访问数据库的性能,将购物网站发布到高性能的服务器中。
即便如此,在“双 11”时,该购物网站还是遇到了瓶颈,服务器马不停蹄地运转,还是应接不暇,无法及时响应每个客户的请求。
阿云:“服务器已经开足马力运行,还是来不及同时响应几十万名客户的并发请求,有什么解决办法突破瓶颈呢?”
答主:“在现实生活中,如果一个人无法及时完成一个任务,就把该任务划分成多个子任务,分派给多个人同时执行,这样就能及时完成任务了。解决购物网站并发访问的瓶颈,也可以采取 同样的思路,把购物网站的服务拆分成多个微服务,这些微服务分布在多台主机中,由多台主机 同时执行,就能及时响应更多客户的请求了。”
如图 2 所示,购物网站的服务被拆分成用户管理、订单管理、商品管理、库存管理等微服务模块,把这些微服务模块部署到多台主机上各自独立运行,就能同时为更多的客户提供服务,从而提高购物网站的并发性能和运行性能。
图 2 把购物网站的服务划分成多个微服务
阿云:“如图 3 所示,从一个网站的业务中拆分出多个微服务,就像把一个西瓜切成好多份,看起来很简单。”
图 3 拆分微服务就像切西瓜
答主:“切西瓜的比喻很形象。但在具体开发时,会遇到很多复杂的问题。例如,业务逻辑之间有着千丝万缕的联系,如何划分和开发微服务呢?此外,微服务需要部署到什么样的容器中, 客户端如何访问微服务,微服务之间又如何相互通信呢?”
阿云:“这倒也是,微服务分布在不同的主机中,它们的通信比独立的单体应用程序内部模块之间的通信要复杂很多。如果有现成的分布式微服务框架可以使用,就能大大提高开发效率。”
答主:“那就要请出本书的主角 Spring Cloud Alibaba 框架,本书将揭开使用该框架开发微服务的神秘面纱。”
阿云:“学习本书内容需要具备什么预备知识呢?”
答主:“需要熟悉 Java 语言、Java Web 开发、Spring 框架和 Spring Boot 技术。假如仅仅熟悉 Java 语言,也可以阅读本书,不过在动手实践时,还要自行学习相关的 Java Web 开发和 Spring 框架知识,才能熟练地开发和部署微服务。在我写的《精通 Spring :Java Web 开发技术详解》一书中,详细介绍了用 Spring 框架开发 Java Web 应用的技术。”
阿云:“我的一些同事熟悉其他编程语言,但是不熟悉 Java,他们也能看得懂本书吗?”
答主:“本书不仅介绍如何编写微服务的程序代码,还介绍了 Spring Cloud Alibaba 框架中各种组件的运行原理、作用和配置,这部分内容适用于所有希望学习微服务开发知识的读者。”
本书资源及服务
本书的学习资源包括本书关键知识点的讲解视频和源代码,读者可以使用手机扫描书中的二维码进行观看,也可以扫描以下资源链接二维码获取本书的代码资源。
作者为本书提供了技术支持网站,该网站提供了与本书相关的学习资源,以及书中提及的软件下载链接地址(分别以链接 1、链接 2、链接 3 等形式标明),请扫描以下技术支持二维码获取相关资源。
作者在写作过程中虽力求严谨细致,但由于时间与精力有限,书中疏漏之处在所难免。如果读者在阅读过程中有任何疑问,也请通过扫描以下技术支持二维码与我们取得联系。
资源链接二维码 技术支持二维码
本书能够顺利出版,是作者、编辑和所有审校人员共同努力的结果,在此表示深深的感谢。同时,祝福所有读者在职场中一帆风顺。
编 者2024 年 9 月