微服务分布式架构基础与实战:基于Spring Boot + Spring Cloudpdf下载

微服务分布式架构基础与实战:基于Spring Boot + Spring Cloud百度网盘pdf下载

作者:
简介:微服务分布式架构基础与实战:基于Spring Boot + Spring Cloud
出版社:
出版时间:2020-03
pdf下载价格:0.00¥

免费下载


书籍下载


内容介绍

内容简介

  微服务分布式架构的内容更新迭代速度极快,2018年6月开始就有许多微服务分布式的数据,但是到2019年已经跟不上Spring Cloud的版本了,过去大多数数据Spring Cloud都用Eureka作为注册中心,而Spring 官方已经在Spring Cloud Eureka 2.0以后宣布停止了Spring Cloud Eureka的更新计划,废弃该项目并将Consul作为Spring Cloud的注册中心。另外大多数书籍的网关依旧使用的Spring Cloud Zuul,但是目前Spring 已经逐渐废弃Spring Cloud Zuul,而是让Spring Cloud Gateway接替他的网关位置。市面上的同类书的技术将没有将此内容更新。另外该书从分布式架构程序的方式角度进行讲解,包括分布式任务调度、分布式事务管理,重点提及了这部分的实战与思想。很多书只是用来教导框架构架,而该书则希望通过框架让读者认识分布式的具体操作方法。
  《微服务分布式架构基础与实战:基于Spring Boot + Spring Cloud》以案例任务模式主要介绍了Spring Boot微服务的持久化、缓存、缓存同步、队列,Spring Cloud的新版注册中心Consul、新版网关Spring Cloud Gateway、Spring Cloud分布式通讯、共享信息、单点登录、鉴权等相关内容。

作者简介

张方兴,多年从事Java编程工作,参与多个项目的研发工作,精通Java编程与SSM技术。

内页插图

目录

第1章 微服务分布式架构设计原理 1
1.1 Java Web应用程序的发展历史 1
1.2 微服务分布式 2
1.2.1 Spring Boot微服务的定义和特点 3
1.2.2 Spring Boot的职场导读 3
1.2.3 Spring部分内容 4
1.2.4 微服务的拆分 6
1.3 【实例】微服务工程Hello World 7
1.3.1 实例背景 7
1.3.2 创建Maven Project 7
1.3.3 使用空Maven Project模板 7
1.3.4 编辑Maven坐标定位及工程名 8
1.3.5 检查Maven目录结构 9
1.3.6 编写Pom文件 10
1.3.7 Spring Boot依赖包的导入 12
1.3.8 编写Spring Boot启动类 14
1.3.9 编写Spring Boot接口 14
1.3.10 当前项目结构 14
1.3.11 启动工程 15
1.3.12 Spring Boot初始化启动后 16
1.3.13 实例易错点 16
1.4 Spring Boot启动类扫描Bean 18
1.4.1 @SpringBootApplication注解 18
1.4.2 @ComponentScan注解 20
1.4.3 Spring Boot扫描其他包下文件 20
1.5 【实例】将端口号改成9090 21
1.5.1 实例背景 21
1.5.2 创建application.properties资源配置
文件 22
1.5.3 增加资源配置文件中的配置信息 23
1.5.4 运行结果 23
1.5.5 实例易错点 23
1.6 YAML文件 24
1.6.1 YAML文件简介 25
1.6.2 YAML文件的书写格式 25
1.7 【实例】使用YAML配置文件 25
1.7.1 实例背景 25
1.7.2 原properties文件 25
1.7.3 转换格式后的YAML文件 26
1.7.4 实例易错点 26
1.8 【实例】通过单配置文件让工程
适应多应用场景 27
1.8.1 实例背景 27
1.8.2 更改application.yml文件 27
1.8.3 更改启动类 27
1.8.4 输入启动参数 29
1.8.5 运行结果 30
1.8.6 实例易错点 30
1.9 【实例】通过多配置文件使工程
适应多应用场景 31
1.9.1 实例背景 31
1.9.2 新建SIT和UAT环境所需资源
配置文件 31
1.9.3 新建系统资源配置文件 31
1.9.4 编写启动类 31
1.9.5 当前项目结构 32
1.9.6 运行结果 32
1.10 微服务配置权重 32
1.10.1 资源配置信息类型的权重 32
1.10.2 资源配置文件类型的权重 33
1.10.3 资源配置文件存在位置与权重
解读 33
1.11 本章小结 34
1.12 习题 34
第2章 分布式的注册中心 35
2.1 注册中心 35
2.1.1 Eureka与Consul的区别 35
2.1.2 Consul的相关术语 37
2.1.3 Consul的安装 37
2.2 Consul的常用命令 37
2.2.1 consul agent -dev 38
2.2.2 consul -members 39
2.2.3 consul leave 40
2.2.4 agent命令的常用配置参数 40
2.2.5 HTTP API 41
2.3 【实例】创建第一个微服务分布式
项目 42
2.3.1 实例背景 42
2.3.2 搭建Consul集群 42
2.3.3 创建微服务工程编写相应依赖
文件 45
2.3.4 Spring Cloud和Spring Boot的
版本对应关系 46
2.3.5 编写微服务YAML资源配置文件 46
2.3.6 编写微服务启动类注册到
Consul上 48
2.3.7 当前项目结构 48
2.3.8 运行结果 49
2.3.9 实例易错点 50
2.4 【实例】通过代码获取Consul中的
服务信息 51
2.4.1 实例背景 51
2.4 2 编写获得其他注册服务的代码 52
2.4 3 运行结果 53
2.4.4 实例易错点 53
2.5 【实例】Spring Cloud操作Consul
的K/V存储 54
2.5.1 实例背景 54
2.5.2 添加依赖 54
2.5.3 利用Consul的UI界面添加K/V
存储 54
2.5.4 编写YAML资源配置文件对应
K/V存储 55
2.5.5 编写MyConfig.java文件对应
相关K/V存储 56
2.5.6 调用MyConfig.java中的参数 57
2.5.7 在启动类引用相关配置 57
2.5.8 当前项目结构 58
2.5.9 运行结果 58
2.5.10 实例易错点 60
2.6 本章小结 60
2.7 习题 60
第3章 分布式的通信 61
3.1 分布式通信 61
3.1.1 Spring Cloud Feign 61
3.1.2 Swagger 61
3.2 【实例】微服务集成Swagger 62
3.2.1 实例背景 62
3.2.2 编写Swagger依赖 62
3.2.3 编写Swagger配置 63
3.2.4 编写接口与接口处的Swagger
配置 64
3.2.5 当前项目结构 66
3.2.6 运行效果 66
3.2.7 实例易错点 70
3.3 【实例】Feign调用微服务接口 72
3.3.1 实例背景 72
3.3.2 引入相关配置信息 73
3.3.3 编写Feign客户端 73
3.3.4 编写调用 75
3.3.5 编写启动类 76
3.3.6 当前项目结构 76
3.3.7 运行结果 77
3.3.8 实例易错点 77
3.4 【实例】Feign的拦截器 78
3.4.1 实例背景 78
3.4.2 在cloud-admin-8084工程中增加
拦截器 78
3.4.3 当前项目结构 79
3.4.4 运行结果 79
3.4.5 实例易错点 80
3.5 Feign的配置 81
3.5.1 传输数据压缩配置 81
3.5.2 日志配置 82
3.5.3 超时配置 83
3.6 【实例】Feign的降级回退处理
――Feign的Fallback类 84
3.6.1 实例背景 84
3.6.2 在资源配置文件中开启Feign内置
的Hystrix权限 84
3.6.3 编写Fallback降级类 84
3.6.4 Service整合Fallback降级类 84
3.6.5 当前项目结构 85
3.6.6 运行结果 85
3.7 【实例】Feign的降级回退处理
――Feign的Fallback工厂 86
3.7.1 实例背景 86
3.7.2 编写Fallback降级工厂 86
3.7.3 整合Fallback降级工厂 87
3.7.4 实例易错点 87
3.8 本章小结 88
3.9 习题 88
第4章 分布式的客户端负载均衡 89
4.1 负载均衡 89
4.1.1 传统服务器端负载均衡 89
4.1.2 Ribbon客户端负载均衡 89
4.2 【实例】Feign整合Ribbon分发
请求 90
4.2.1 实例背景 90
4.2.2 编写cloud-book-8086启动类与
配置类支持Ribbon 91
4.2.3 Service和Controller 92
4.2.4 当前项目结构 94
4.2.5 运行效果 95
4.2.6 实例易错点 96
4.3 Ribbon的负载均衡策略配置 97
4.4 本章小结 98
4.5 习题 98
第5章 分布式的断路器 99
5.1 断路器 99
5.1.1 为什么需要断路器 99
5.1.2 Hystrix 99
5.1.3 Hystrix解决的问题 100
5.1.4 Hystrix如何解决问题 100
5.2 【实例】Hystrix断路器的降级
回退 101
5.2.1 实例背景 101
5.2.2 编写相关Pom文件 101
5.2.3 编写application资源配置文件 101
5.2.4 编写Ribbon配置类 102
5.2.5 编写启动类 102
5.2.6 编写Service类 103
5.2.7 编写Controller类 103
5.2.8 当前项目结构 104
5.2.9 运行结果 105
5.2.10 实例易错点 106
5.3 Hystrix线程池 108
5.3.1 Hystrix断路器注解式的命令
配置 109
5.3.2 Hystrix断路器的注解式线程池
配置 111
5.3.3 Hystrix断路器注解式的整体
定制配置 112
5.3.4 Hystrix断路器资源配置式的
整体定制配置 113
5.4 【实例】Hystrix断路器的请求
缓存 114
5.4.1 实例背景 114
5.4.2 通过Filter初始化Hystrix
上下文 114
5.4.3 让启动类扫描Filter过滤器 116
5.4.4 编写Controller的Helper类 116
5.4.5 编写Controller类 118
5.4.6 当前项目结构 118
5.4.7 运行结果 119
5.4.8 销毁Hystrix的请求缓存 121
5.4.9 实例易错点 121
5.5 【实例】Hystrix的请求合并 123
5.5.1 实例背景 123
5.5.2 增加@HystrixCollapser请求合并
修饰的函数 124
5.5.3 Controller中调用请求合并函数 126
5.5.4 当前项目结构 126
5.5.5 运行结果 127
5.5.6 实例易错点 128
5.6 【实例】Hystrix的可视化监控 129
5.6.1 实例背景 129
5.6.2 Hystrix可视化监控的依赖 129
5.6.3 Hystrix可视化监控的启动类 129
5.6.4 被监控的微服务增加响应地址 130
5.6.5 当前项目结构 131
5.6.6 运行结果 132
5.6.7 实例易错点 134
5.7 本章小结 135
5.8 习题 135
第6章 微服务的异步线程池 136
6.1 异步线程池 136
6.1.1 异步线程池特点 136
6.1.2 常见的线程池 136
6.2 【实例】创建无返回值异步线
程池 137
6.2.1 实例背景 137
6.2.2 编写Pom文件 137
6.2.3 编写Spring Boot启动类 138
6.2.4 编写异步线程池任务接口与
实现 138
6.2.5 编写外部可调用接口 139
6.2.6 当前项目结构 140
6.2.7 运行程序查看异步线程池效果 140
6.2.8 实例易错点 141
6.3 【实例】创建有返回值异步
线程池 141
6.3.1 实例背景 141
6.3.2 增加新的服务接口 141
6.3.3 增加新的服务实现 141
6.3.4 增加新的调用 142
6.3.5 当前项目结构 142
6.3.6 运行程序查看异步线程池效果 142
6.3.7 实例易错点 143
6.4 【实例】优化异步线程池 143
6.4.1 实例背景 143
6.4.2 创建初始化线程池配置类 143
6.4.3 更改无返回值的异步线程池
Service实现类 145
6.4.4 运行程序查看异步线程池效果 145
6.4.5 实例易错点 146
6.5 【实例】优雅停止异步线程池 146
6.5.1 实例背景 146
6.5.2 何为“优雅” 146
6.5.3 修改原Config配置类 147
6.5.4 修改原Controller控制层 148
6.5.5 当前项目结构 149
6.5.6 优雅停止异步线程池的执行
效果 150
6.5.7 实例易错点 152
6.6 @Enable*注解 152
6.7 本章小结 152
6.8 习题 153
第7章 微服务整合持久化数据源 154
7.1 spring-data 154
7.1.1 ORM规范 154
7.1.2 JPA、Hibernate、spring-data-jpa
之间的关系 155
7.1.3 安装MySQL 155
7.2 【实例】Spring Boot整合MyBaits
注解式编程 156
7.2.1 实例背景 156
7.2.2 添加Pom文件 156
7.2.3 编写application资源配置文件 157
7.2.4 编写dao层 157
7.2.5 编写访问接口 159
7.2.6 当前项目结构 160
7.2.7 运行效果 160
7.2.8 实例易错点 160
7.3 @Mapper注解详解 162
7.3.1 @Mapper和XML形式的对应
关系 162
7.3.2 MyBatis的注解式编程多表
查询 162
7.3.3 MyBatis的注解式编程分页
查询 163
7.3.4 注册DataSource数据源 165
7.4 【实例】Spring Boot整合
spring-data-jpa 166
7.4.1 实例背景 166
7.4.2 添加Pom文件 166
7.4.3 添加资源配置文件中的相关
信息 166
7.4.4 添加实体类映射 167
7.4.5 添加JPA的dao层 168
7.4.6 添加Controller控制层查询JPA的
dao层 169
7.4.7 当前项目结构 170
7.4.8 运行结果 170
7.4.9 实例易错点 170
7.5 本章小结 171
7.6 习题 171
第8章 微服务事务 172
8.1 @Transactional注解 172
8.1.1 @Transactional声明式事务的
传播行为 173
8.1.2 脏读、不可重复读与幻读 173
8.1.3 @Transactional声明式事务的
隔离级别 174
8.1.4 @Transactional声明式事务的
超时时间 175
8.1.5 @Transactional声明式事务的
只读 175
8.1.6 @Transactional声明式事务指定
异常 176
8.2 【实例】Spring Boot整合声明式
事务 176
8.2.1 实例背景 176
8.2.2 整合@Transactional的Service层
编写 177
8.2.3 整合@Transactional的Controller层
编写 178
8.2.4 当前项目结构 179
8.2.5 运行结果 179
8.2.6 实例易错点 180
8.3 本章小结 181
8.4 习题 181
第9章 微服务的缓存与分布式的消息
通信 182
9.1 Redis 182
9.1.1 BSD协议 182
9.1.2 Java与Redis的历史 183
9.1.3 Spring Data Redis 183
9.2 【实例】微服务整合Spring Data
Redis增删改查 184
9.2.1 实例背景 184
9.2.2 编写application.properties资源
配置文件 184
9.2.3 配置RedisTemplate模板 185
9.2.4 编写操作Redis的工具类 186
9.2.5 编写实体类及接口调用 188
9.2.6 当前项目结构 189
9.2.7 运行结果 189
9.2.8 实例易错点 190
9.3 【实例】分布式使用Redis实现
消息通信 190
9.3.1 消息通信应用场景 190
9.3.2 Redis与MQ一系列消息队列的
区别 191
9.3.3 实例背景 191
9.3.4 在send微服务中配置模板 192
9.3.5 在send微服务中定时向队列
发布数据 192
9.3.6 在listener微服务中编写订阅渠道
的配置信息 193
9.3.7 在listener微服务中编写监听
实现类 195
9.3.8 当前项目结构 195
9.3.9 send微服务与listener微服务运行
结果 196
9.3.10 实例易错点 196
9.4 Spring Cache与Spring Data Redis
的区别 196
9.5 【实例】保持MySQL与Redis
数据一致性 197
9.5.1 实例背景 197
9.5.2 编写资源配置文件 198
9.5.3 编写实体类Java Bean 198
9.5.4 编写JPA仓库 199
9.5.5 编写Service接口及实现类 199
9.5.6 编写Controller接口进行测试 202
9.5.7 当前项目结构 202
9.5.8 运行结果 202
9.5.9 实例易错点 203
9.6 本章小结 204
9.7 习题 204
第10章 微服务的任务调度与分布式的
任务调度 205
10.1 【实例】微服务整合任务调度 205
10.1.1 实例背景 205
10.1.2 编写任务调度实现类 205
10.1.3 编写资源配置文件 206
10.1.4 当前项目结构 206
10.1.5 运行效果 206
10.1.6 实例易错点 206
10.2 @Scheduled注解详解 207
10.2.1 cron表达式 207
10.2.2 每个字段允许值 207
10.2.3 cron特殊字符意义 208
10.2.4 常用cron表达式 208
10.3 任务调度的分布式 209
10.3.1 任务调度的分布式解决方案 209
10.3.2 任务调度的分布式实现原理 210
10.4 【实例】微服务整合任务调度
分布式 210
10.4.1 实例背景 210
10.4.2 增加Quartz依赖 210
10.4.3 在数据库中增加Quartz分布式
的管理表 210
10.4.4 编写资源配置文件 211
10.4.5 创建任务调度管理Java Bean 212
10.4.6 创建所需执行的任务 213
10.4.7 创建执行任务的操作类 213
10.4.8 增加控制层 216
10.4.9 当前项目结构 218
10.4.10 运行效果 218
10.4.11 实例易错点 219
10.5 本章小结 220
10.6 习题 220
第11章 微服务的文件上传与分布式
文件管理 221
11.1 文件上传/下载原理 221
11.1.1 SpringMVC文件上传原理 223
11.1.2 文件下载原理 225
11.2 【实例】微服务的单文件和
多文件上传 226
11.2.1 实例背景 226
11.2.2 编写application.properties资
源配置文件 227
11.2.3 编写相关接口 228
11.2.4 编写前台页面 230
11.2.5 当前项目结构 231
11.2.6 运行结果 232
11.2.7 实例易错点 233
11.3 分布式文件管理 235
11.3.1 分布式文件管理特性 235
11.3.2 分布式文件管理解决的问题 235
11.3.3 分布式文件管理解决方案 235
11.4 FastDFS解决方案 235
11.4.1 FastDFS的存储策略 236
11.4.2 FastDFS的文件上传过程 236
11.4.3 FastDFS的文件同步过程 236
11.4.4 FastDFS的文件下载过程 237
11.5 FastDFS的安装部署 237
11.5.1 安装LibFastCommon 237
11.5.2 安装FastDFS 237
11.5.3 配置FastDFS的跟踪服务器 238
11.5.4 配置FastDFS的数据存储
服务器 239
11.5.5 配置FastDFS的客户端
并测试 240
11.5.6 安装Nginx部署FastDFS 240
11.6 【实例】分布式微服务整合
FastDFS 243
11.6.1 实例背景 243
11.6.2 编写FastDFS核心配置类 244
11.6.3 编写FastDFS工具类 244
11.6.4 编写测试接口 245
11.6.5 当前项目结构 246
11.6.6 运行结果 246
11.6.7 实例易错点 247
11.7 本章小结 248
11.8 习题 248
第12章 扩展与部署 249
12.1 微服务分布式架构相关方案
总结 249
12.1.1 解决方案与目标 249
12.1.2 分布式部分技术细节扩展 250
12.1.3 动静分离 250
12.1.4 前后端分离 250
12.1.5 数据库读写分离与主从分离 251
12.1.6 应用层与数据层分离 251
12.1.7 CDN加速 251
12.1.8 异步架构 251
12.1.9 响应式编程 251
12.1.10 冗余化管理 252
12.1.11 灰度发布 252
12.1.12 页面静态化 252
12.1.13 服务端主动推送 253
12.2 微服务扩展 253
12.2.1 微服务整合日志 253
12.2.2 微服务整合单元测试 253
12.2.3 微服务整合全局异常 253
12.2.4 微服务整合JSR-303验证机制 254
12.2.5 微服务整合国际化 254
12.2.6 微服务整合安全与认证 254
12.2.7 微服务整合WebSocket协议 254
12.2.8 微服务整合HTTPS 255
12.2.9 微服务整合批处理 255
12.2.10 微服务整合lombok 255
12.2.11 微服务整合异步消息驱动 255
12.2.12 分布式链路监控 255
12.2.13 分布式单点登录 256
12.3 【实例】分布式网关的初步
测试 256
12.3.1 实例背景 256
12.3.2 使用资源配置文件的方式配置
分布式网关 256
12.3.3 使用注册Bean的方式配置
分布式网关 257
12.3.4 运行结果 258
12.4 微服务打包 258
12.4.1 Jar包 258
12.4.2 War包 259
12.5 本章小结 259
12.6 习题 259
参考文献 260

前言/序言

  目前,Spring Boot + Spring Cloud架构已经成为Java程序员的必备技能之一,刚开始学习时看到琳琅满目的Spring全家桶,可能会感到无从下手。如果只了解微服务中的各知识点,而忽略了以微服务分布式架构的方式学习系统的架构顺序,初学者可能就不知道如何使用微服务构建分布式系统。为了使读者更快掌握Spring Boot + Spring Cloud的基础知识与架构方法,本书的章节顺序即应用系统的架构顺序。
  分布式可以理解为人体器官,人体可看成分布式系统,大脑是注册中心的集群,四肢与器官是提供服务的微服务,前进的距离是微服务运行之后的返回值,消耗的体力是微服务中处理的逻辑,影响的记忆是某些微服务对数据库的增删改查。分布式可看成一种思想,而Spring Cloud 与 Spring Boot是实现了这种思想的工具。
  无论多复杂的分布式应用程序,整合多少个服务器,调用多少种服务接口,使用多少种协议,使用集群还是高可用的何种架构方式,使用客户端还是服务端的何种负载均衡,使用哪个消息中间件、哪个数据库集群,使用搜索引擎/非关系型数据库/时序性数据库/关系型数据库/文件管理等多少种存储介质,其分布式本质都是分布式自身的思想。建议读者动手将本书实例都敲在IDE中,在Linux服务器上搭建各集群,那么上面那些看起来颇具难度的问题,都将不会是难题。
  本书主要内容如下。
  介绍微服务分布式的相关概念,搭建第一个微服务项目,了解微服务项目的运行过程。通过微服务整合Consul注册中心,搭建第一个微服务+注册中心的分布式系统。多个微服务与Consul注册中心相连,彼此通信,微服务获得彼此的接口及地址,调用彼此的接口与服务。然后无可避免地需要处理彼此通信时报错的情况,以免单一微服务无法正常提供服务,导致整个分布式系统的瘫痪。此时采用Ribbon客户端负载均衡方案,依靠多台服务器部署多个相同微服务项目,以提高系统的性能。在分布式通信不足以解决全部报错问题时,可选择Hystrix进行更精细划分,保证在任何一台微服务出现问题时,系统整体仍然能正常运行。
  至此初步搭建了分布式系统,然后开始增加微服务的增删改查等业务功能。在系统处理增删改查过程的同时,还需要事务功能的支撑与管理。在初步增删改查后,依靠微服务的缓存增加微服务的性能,同时需要确保Redis与MySQL之间的增删改查一致性。另外,如果有特殊业务需求,可由分布式消息通信彼此协作、沟通、处理。
  在处理基本业务后,还会有定时任务等业务需求,此时需要微服务的任务调度进行处理。而单节点任务调度的微服务可能会有宕机或重复执行等相关问题,只有使多台微服务同时进行任务调度,且彼此协同的情况下,才能解决此类问题。这时需要Quartz分布式任务调度解决多个任务调度间彼此协同、相互管理等问题。若有文件上传、下载等相关需求,需要使用微服务的文件上传管理。单节点文件上传可能存在磁盘空间不足或不易管理等问题,需要FastDFS分布式文件管理以解决多台文件管理服务器彼此协同、磁盘扩容等问题。
  在对整体分布式微服务编程后,需要进行部署,第12章介绍如何部署微服务分布式项目,以及架构方案、设计方式、编程框架、网关等。
  本书适合作为高等学校计算机、软件工程等相关专业Java架构课程的教材,也可供对微服务分布式架构感兴趣的人员参考阅读。
  非常感谢阅读本书,学无止境,与君共勉。
  由于编者水平有限,加之编写时间仓促,书中难免出现错误与不足之处,欢迎读者批评指正。