目录
第1章微服务架构与Spring Cloud Alibaba1
1.1微服务架构1
1.1.1单体架构与微服务架构1
1.1.2微服务架构图2
1.1.3Spring Cloud Alibaba微服务解决方案3
1.2搭建开发环境4
1.2.1安装JDK4
1.2.2安装Maven5
1.3微服务初步实践6
1.3.1微服务拆分原则与角色划分6
1.3.2创建客户信息微服务6
1.3.3创建订单信息微服务11
1.3.4远程调用微服务13
第2章Nacos注册中心与配置管理16
2.1Nacos简介16
2.2Nacos服务注册与发现16
2.2.1安装与启动Nacos组件17
2.2.2服务提供者项目18
2.2.3服务消费者项目19
2.3用Nacos配置管理21
2.3.1基本配置21
2.3.2微服务拉取配置22
2.3.3配置信息热更新26
2.3.4多环境共享配置27
2.3.5多个微服务共享配置28
2.4搭建高可用的Nacos集群30
2.4.1搭建Nacos集群30
2.4.2使用Nginx对集群进行负载均衡32
2.4.3以集群的方式管理微服务34
2.4.4以集群的方式管理配置34
第3章负载均衡组件LoadBalancer37
3.1LoadBalancer负载均衡策略37
3.2默认负载均衡策略37
3.2.1创建服务提供者项目37
3.2.2创建服务消费者项目38
3.2.3测试负载均衡40
3.3切换负载均衡策略41
3.3.1使用随机负载均衡策略41
3.3.2切换使用RoundRobinLoadBalancer轮询负载均衡策略42
3.3.3使用NacosLoadBalancer负载均衡策略43
3.3.4启动类中负载均衡注解的多种用法44
第4章服务调用框架OpenFeign45
4.1OpenFeign框架简介45
4.1.1OpenFeign基础知识45
4.1.2OpenFeign的动态代理45
4.2使用OpenFeign框架调用微服务46
4.2.1服务提供者与调用者项目46
4.2.2负载均衡48
4.2.3设置日志级别49
4.2.4设置服务超时时间50
第5章网关组件53
5.1网关组件概述53
5.2网关组件快速入门54
5.2.1准备微服务项目54
5.2.2创建网关项目实现简单路由功能54
5.3实现路由转发中的负载均衡56
5.4过滤器57
5.4.1路由断言57
5.4.2路由过滤器58
5.4.3路由过滤器工厂59
5.4.4默认过滤器61
5.4.5全局过滤器61
5.5网关的Cors跨域配置63
5.6灰度发布65
5.6.1灰度发布的思路66
5.6.2通过Gateway实现灰度发布66
第6章Sentinel流量控制和熔断降级68
6.1雪崩问题68
6.2Sentinel简介69
6.2.1Sentinel 基本概念69
6.2.2Sentinel安装与启动69
6.2.3依赖和配置70
6.3流量控制71
6.3.1基本案例71
6.3.2流控模式73
6.3.3流控模式之关联73
6.3.4流控模式之链路75
6.3.5流控效果80
6.3.6流控效果之Warm Up80
6.3.7流控效果之排队等待82
6.3.8热点参数限流84
6.4服务降级87
6.5线程隔离87
6.5.1线程隔离基础准备88
6.5.2线程隔离实践89
6.6熔断91
6.7授权规则95
6.8Sentinel异常处理97
第7章远端调用组件Dubbo100
7.1Dubbo组件简介100
7.1.1使用Dubbo进行远端调用的流程100
7.1.2Dubbo和REST调用方式的差别100
7.1.3ZooKeeper的下载安装与启动101
7.2Dubbo远端调用实践101
7.2.1创建服务提供者101
7.2.2创建服务调用者103
7.2.3Dubbo中的负载均衡104
7.2.4Dubbo负载均衡策略104
7.3Sentinel 对 Dubbo 服务的限流与熔断降级105
7.3.1在服务提供者端实现限流105
7.3.2在服务提供者端实现熔断107
7.3.3在服务提供者端实现服务降级逻辑108
7.3.4在服务调用者端实现降级逻辑109
第8章RocketMQ消息中间件111
8.1RocketMQ简介111
8.2RocketMQ安装与启动113
8.3普通消息发送115
8.3.1发送同步消息115
8.3.2发送异步消息116
8.3.3发送单向消息117
8.4消费消息118
8.4.1Push消费118
8.4.2Pull消费120
8.5顺序消息121
8.5.1全局有序121
8.5.2局部有序124
8.6延迟消息126
8.7批量消息127
8.7.1批量发送消息127
8.7.2分批批量发送消息128
8.8过滤消息129
8.8.1Tag过滤129
8.8.2SQL方式过滤130
8.9事务消息132
第9章Spring Cloud Stream整合消息中间件136
9.1Spring Cloud Stream基础136
9.2Spring Cloud Stream整合RocketMQ137
9.2.1消息发送137
9.2.2消息消费138
9.3Spring Cloud Stream整合RabbitMQ139
9.3.1RabbitMQ安装与启动139
9.3.2消息发送140
9.3.3消息消费141
第10章Seata分布式事务144
10.1Seata 的工作原理144
10.1.1Seata的3个角色144
10.1.2工作流程145
10.2Seata的安装与启动145
10.2.1Seata下载与修改配置145
10.2.2Nacos共享配置146
10.2.3创建全局事务表与分支事务表148
10.2.4启动Seata服务149
10.3无分布式事务的微服务150
10.3.1创建订单项目150
10.3.2扣减账户项目154
10.3.3扣减库存项目156
10.3.4测试无分布式事务的情况157
10.4XA模式158
10.4.1两阶段提交158
10.4.2XA模式架构159
10.4.3实现XA模式160
10.5AT模式162
10.5.1AT模式执行流程162
10.5.2AT模式的实现162
10.6TCC模式164
10.6.1TCC模式介绍164
10.6.2TCC模式的实现之修改数据库165
10.6.3TCC模式的实现之修改orderservice项目165
10.6.4TCC模式的实现之修改accountservice项目167
10.6.5TCC模式的实现之修改storageservice项目 169
10.6.6测试TCC模式172
10.7Saga模式172
10.7.1概述172
10.7.2Saga的实现173
第11章微服务监控组件Skywalking174
11.1Skywalking基础知识174
11.2Skywalking服务器端的下载、安装与启动176
11.2.1下载 Skywalking176
11.2.2配置 Skywalking176
11.2.3启动Skywalking178
11.3微服务项目整合Skywalking179
11.3.1下载Java Agent179
11.3.2配置微服务179
11.4服务监控与链路追踪182
11.4.1服务监控182
11.4.2拓扑结构图183
11.4.3链路跟踪184
11.5整合logback监控链路184
11.5.1修改微服务commonservice184
11.5.2修改微服务orderservice185
11.5.3修改微服务userservice和userservice2185
11.5.4链路监控情况测试186
第12章Docker部署Spring Boot项目和微服务组件188
12.1Docker与Spring Cloud微服务188
12.1.1Docker镜像、容器和虚拟化管理引擎188
12.1.2搭建Docker环境189
12.1.3用Docker管理微服务的方式189
12.2容器化管理Spring Boot项目190
12.2.1准备Spring Boot项目190
12.2.2打包成JAR包191
12.2.3制作JDK 17基础镜像191
12.2.4用JAR包制作镜像193
12.3容器化管理组件194
12.3.1容器化管理Nacos组件195
12.3.2容器化管理Sentinel196
12.3.3通过Docker容器部署Redis197
第13章使用Docker部署微服务项目实践199
13.1商品管理微服务系统架构分析199
13.1.1微服务项目的表现形式与优势199
13.1.2基于Docker容器的微服务架构200
13.1.3业务功能点和数据表结构200
13.2开发商品管理微服务项目201
13.2.1开发商品管理模块201
13.2.2开发网关模块206
13.3容器化部署商品管理微服务208
13.3.1打包商品管理和网关模块208
13.3.2容器化部署并运行MySQL和Redis208
13.3.3容器化部署并运行Nacos和Sentinel209
13.3.4容器化部署商品管理模块209
13.3.5容器化部署网关模块210
13.3.6观察微服务容器化效果210
13.3.7引入限流和熔断措施211
13.4扩容与灰度发布212
13.4.1演示扩容效果212
13.4.2演示灰度发布流程214
第14章使用Kubernetes整合Spring Boot项目216
14.1Kubernetes概述216
14.1.1Kubernetes的作用216
14.1.2搭建Kubernetes环境217
14.1.3Kubernetes与Docker容器的关系219
14.1.4Kubernetes的Service220
14.1.5Kubernetes的Labels220
14.1.6Deployment的概念220
14.1.7用Kubernetes编排Spring Boot容器221
14.1.8基于Spring Boot的Docker容器223
14.1.9编写Service和Deployment配置文件224
14.1.10使用命令编排Spring Boot容器225
14.1.11测试Pod、Service和Deployment225
14.1.12查看Pod运行日志225
14.2Kubernetes常用技术227
14.2.1删除Pod、Service和Deployment227
14.2.2伸缩节点228
14.2.3自动伸缩节点228
14.2.4创建Deployment并开放端口229
14.2.5进入Pod执行命令230
14.2.6用Ingress暴露服务231
14.2.7Ingress简介231
14.2.8Ingress整合Service的做法231
第15章使用Kubernetes编排微服务233
15.1使用Kubernetes编排组件233
15.2编排MySQL233
15.2.1编排Redis235
15.2.2StatefulSet和Deployment的差别237
15.2.3使用StatefulSet编排Nacos238
15.2.4使用StatefulSet编排Sentinel240
15.3使用Kubernetes编排图书管理模块242
15.3.1微服务框架说明243
15.3.2图书管理微服务模块243
15.3.3编排图书管理微服务模块247
15.3.4测试Kubernetes编排微服务项目的效果248
15.3.5引入限流和熔断250
第16章基于Jenkins的微服务CI/CD实战252
16.1CI/CD简介252
16.2Jenkins安装253
16.3Jenkins基本配置256
16.4自动构建项目258
16.4.1创建任务258
16.4.2设置源码管理259
16.4.3构建步骤260
16.5测试步骤263
参考文献265