《Spring Cloud Alibaba微服务开发宝典》目录 引言 2 第1章 微服务简介 4 1.1 微服务的概念与特征 4 1.1.1 微服务按照业务划分 4 1.1.2 微服务运行在独立的进程中 5 1.1.3 微服务采用HTTP协议通信 5 1.1.4 微服务采用统一的管理框架 6 1.2 Spring Cloud框架概述 7 1.3 Spring Cloud Alibaba框架概述 8 1.4 各种软件的版本匹配 8 1.5 准备微服务的开发和运行环境 9 1.5.1 安装Intellij IDEA 9 1.5.2 为IDEA配置Maven 10 1.5.3 安装和启动Nacos服务器 12 1.5.4 访问Nacos服务器的管理平台 12 1.5.5 查看Nacos服务器的日志 13 1.6 云原生的概念 13 1.7 小结 14 第2章 第一个范例:helloapp项目 15 2.1 提供者和消费者的通信以及实现原理 15 2.2 在IDEA中创建helloapp项目 16 2.3 添加hello-provider模块 17 2.3.1 在IDEA中创建hello-provider模块 17 2.3.2 在pom.xml文件中添加Spring Cloud Alibaba依赖 19 2.3.3 创建控制器类HelloProviderController 23 2.3.4 在application.properties文件中配置微服务 24 2.3.5 启动hello-provider模块 24 2.4 添加hello-consumer模块 25 2.4.1 在IDEA中创建hello-consumer模块 26 2.4.2 在启动类中加入@EnableFeignClients注解 27 2.4.3 创建HelloFeignService接口 28 2.4.4 创建控制器类HelloConsumerController 29 2.4.5 在application.properties文件中配置微服务 30 2.4.6 启动和访问hello-consumer模块 30 2.4.7 HelloFeignService接口的默认方法 31 2.5 启动微服务的多个实例 32 2.6 LoadBalancer负载均衡器 34 2.7 通过RestTemplate类访问微服务 36 2.7.1 使用LoadBalancerClient接口 37 2.7.2 使用@LoadBalanced注解 38 2.8 小结 39 第3章 微服务的注册与发现 40 3.1 Nacos Discovery组件的配置属性 40 3.1.1 禁止注册微服务 41 3.1.2 Nacos Discovery组件的客户端缓存 42 3.1.3 微服务的分组和命名空间 42 3.2 微服务的健康检测 43 3.2.1 微服务的临时实例 44 3.2.2 微服务的永久实例 45 3.3 访问DiscoveryClient接口 46 3.4 通过Actuator监控Nacos Discovery的端点 47 3.6 Nacos Discovery组件对微服务列表的监控 49 3.7 小结 49 第4章 Nacos配置中心 50 4.1 在Nacos服务器上创建配置属性 51 4.2 在微服务中读取配置属性 52 4.2.1 创建bootstrap.properties配置文件 53 4.2.2 Nacos Config组件的配置属性 53 4.2.3 通过Environment对象读取配置属性 54 4.2.4 通过@Value注解读取配置属性 55 4.2.5 通过@ConfigurationProperties注解读取配置属性 56 4.3 配置单元的Data ID、分组和命名空间 57 4.4 配置属性的动态更新 59 4.5 不同环境下配置属性的切换 59 4.6 扩展的配置单元 62 4.7 监控Nacos Config组件的端点(EndPoint) 64 4.8 设置YAML格式的配置属性 65 4.9 配置属性的持久化 66 4.10 配置属性的回滚 67 4.11 小结 69 第5章 Nacos集群 70 5.1 Nacos集群的Raft算法 70 5.1.1 节点之间数据的同步 70 5.1.2 节点的选举机制 71 5.2 搭建Nacos集群 72 5.2.1 配置Nacos节点 73 5.2.2 启动Nacos节点 74 5.2.3 避免各个Nacos节点的端口冲突 74 5.2.4 Nacos集群的选举 74 5.2.5 微服务访问Nacos集群 76 5.2.6 Nacos集群的同步 76 5.3 Nacos集群的AP和CP运行模式 77 5.4 使用Nginx反向代理 79 5.5 通过Keepalived建立Nginx集群 81 5.6 小结 85 第6章 远程调用组件:OpenFeign 86 6.1 优化设定所访问的微服务的名字 86 6.2 优化设定映射URL的根路径 87 6.3 输出详细日志 87 6.4 请求和响应数据的压缩 89 6.5 超时配置 90 6.6 异常处理 91 6.6.1 把OpenFeign与Sentinel整合 92 6.6.2 创建回调类 92 6.6.3 创建回调类和工厂类 94 6.7 传递对象参数 95 6.7.1 传递简单对象 97 6.7.2 传递复杂对象 98 6.8 小结 99 第7章 远程调用框架:Dubbo 100 7.1 比较Dubbo和OpenFeign 100 7.2 创建采用Dubbo框架的范例 101 7.2.1 创建hello-provider提供者模块 102 7.2.2 创建hello-consumer消费者模块 105 7.2.3 消费者远程访问提供者 107 7.3 超时和重试次数设置 107 7.4 异常处理 109 7.5 传递对象参数 110 7.6 负载均衡 111 7.7 Dubbo与Sentinel整合 114 7.8 提供者回调消费者 116 7.9 消费者异步调用服务方法 120 7.10 小结 122 第8章 流量控制组件:Sentinel 123 8.1 微服务容错的基本原理 123 8.1.1 限流 125 8.1.2 隔离 125 8.1.3 熔断和降级 125 8.2 微服务与Sentinel整合 126 8.2.1 hello-consumer模块与Sentinel整合 126 8.2.2 安装Sentinel控制台 127 8.2.3 在Sentinel控制台查看微服务的流量 128 8.3 流控(流量控制)规则 129 8.3.1 流控模式 131 8.3.2 流控效果 133 8.4 熔断规则 134 8.4.1 慢调用比例 135 8.4.2 异常比例 136 8.4.3 异常数 136 8.5 系统规则 137 8.6 授权规则 138 8.7 @SentinelResource注解 139 8.7.1 热点规则 140 8.7.2 对请求被拒绝的处理 141 8.7.3 对异常的处理 143 8.8 自定义对BlockException的处理方式 145 8.9 集群流控 147 8.9.1 集群流控的原理 147 8.9.2 Token Server的部署模式 148 8.9.3 配置集群流控 149 8.10 Sentinel规则的持久化 153 8.10.1 流控规则的持久化 153 8.10.2 熔断规则的持久化 155 8.10.3 系统规则的持久化 157 8.11 小结 158 第9章 网关服务:GateWay 160 9.1 Spring Cloud GateWay简介 160 9.2 创建网关服务模块 161 9.3 与Nacos整合 163 9.4 断言(Predicate) 165 9.4.1 内置的断言工厂 165 9.4.2 自定义断言工厂 167 9.5 过滤器(Filter) 170 9.5.1 局部内置过滤器 171 9.5.2 默认过滤器 175 9.5.3 全局内置过滤器 175 9.5.4 自定义局部过滤器 176 9.5.5 自定义全局过滤器 178 9.5.6 使用SLF4J日志工具 179 9.6 与Sentinel整合 180 9.6.1 针对路由限流 182 9.6.2 对自定义的API入口限流 184 9.6.3 同时对路由和API入口限流 186 9.7 跨域配置 188 9.8 超时配置 189 9.9 通过Actuator监控网关 190 9.10 网关集群 191 9.11 小结 193 第10章 消息驱动框架:Stream 194 10.1 消息中间件简介 195 10.1.1 消息中间件的运用场景 195 10.1.2 消息中间件的缺点 197 10.1.3 比较各种消息中间件产品 197 10.2 RocketMQ简介 198 10.2.1 RocketMQ涉及的基本概念 199 10.2.2 RocketMQ的消息收发模型 200 10.2.3 安装和启动RocketMQ 200 10.2.4 安装和启动RocketMQ的控制台 201 10.3 搭建RocketMQ的集群 202 10.3.1 搭建NameServer集群 204 10.3.2 搭建BrokerServer集群概述 204 10.3.3 多Master模式 206 10.3.4 多Master多Slave,异步复制模式 206 10.3.5 多Master多Slave,同步双写模式 207 10.4 Spring Cloud Stream简介 208 10.5 在微服务中收发消息 209 10.5.1 创建消息生产者 210 10.5.2 创建消息消费者 211 10.5.3 运行消息生产者和消费者 212 10.5.4 收发Message类型的消息 212 10.6 通过StreamBridge发送消息 213 10.6.1 StreamBridge的用法 214 10.6.2 用ChannelInterceptor拦截消息 216 10.7 发送HTTP请求正文 217 10.8 通过Function函数式接口收发消息 218 10.9 响应式收发消息 219 10.10 多输入通道和输出通道 220 10.11 批量消费消息 222 10.12 批量生产消息 222 10.13 处理错误 223 10.13.1 清除失败消息 223 10.13.2 把失败消息发送到DLQ队列 223 10.13.3 失败消息的重新尝试消费 224 10.14 消费者分组和分区 226 10.15 消息正文的类型转换 228 10.16 通过Actuator监控Stream 230 10.17 小结 231 第11章 分布式链路追踪:SkyWalking 232 11.1 SkyWalking简介 232 11.2 比较各个链路追踪软件 233 11.3 安装和运行SkyWalking 234 11.4 在微服务中安置探针Agent 236 11.4.1 查看拓朴图 238 11.4.2 追踪链路 238 11.4.3 服务、实例和端点维度 239 11.4.4 性能分析 240 11.5 采集日志 242 11.6 自定义链路追踪 245 11.7 忽略端点 247 11.8 告警 248 11.8.1 编写满足告警规则的方法 250 11.8.2 创建处理告警的网络钩子 251 11.8.3 测试告警 253 11.9 整合Elasticsearch数据库 254 11.10 整合MySQL数据库 256 11.11 通过Nacos建立SkyWalking集群 257 11.12 小结 260 第12章 分布式事务框架:Seata 261 12.1 分布式事务概述 261 12.2 Seata简介 263 12.3 Seata的事务模式 264 12.3.1 AT 模式 265 12.3.2 TCC 模式 271 12.3.3 Saga 模式 271 12.3.4 XA 模式 272 12.4 安装和运行Seata Server 273 12.5 创建AT事务模式下的范例 275 12.5.1 创建Seata Server的MySQL存储源 276 12.5.2 处理分布式事务的微服务的架构 277 12.5.3 创建order-service微服务 278 12.5.4 声明全局事务和分支事务 285 12.5.5 演示全局事务的提交和撤销 286 12.6 整合Nacos建立Seata Server集群 288 12.6.1 在MySQL中创建seata数据库和表 289 12.6.2 在Nacos配置中心配置Seata Server 289 12.6.3 在Seata Server的配置文件中配置Nacos 290 12.6.4 在微服务中配置Seata 292 12.6.5 运行和访问Seata Server 集群 292 12.7 事务组与Seata Server集群的映射 293 12.8 小结 294 第13章 分库分表中间件:ShardingSphere 295 13.1 分库分表概述 296 13.2 ShardingSphere简介 298 13.2.1 Sharding-JDBC简介 299 13.2.1 Sharding-Proxy简介 299 13.3 ShardingSphere核心概念 300 13.3.1 和表相关的概念 300 13.3.2 和分片相关的概念 301 13.4 ShardingSphere的工作流程 303 13.5 ShardingSphere的SQL规范 304 13.6 运用Sharding-JDBC的范例 306 13.6.1 加入Sharding-JDBC等的依赖 306 13.6.2 创建拆分后的订单表 307 13.6.3 配置Sharding-JDBC 和MyBatis 308 13.6.4 创建Order实体类 309 13.6.5 创建OrderDao数据访问接口 309 13.6.6 创建OrderService服务类 310 13.6.7 创建OrderController控制器类 310 13.6.8 运行范例,演示SQL路由 311 13.6.9 把订单表拆分到两个数据库中 311 13.6.10 配置绑定表 313 13.6.11 配置广播表 314 13.6.12 主从数据库和读写分离 315 13.7 使用Sharding-Proxy 317 13.7.1 安装和配置Sharding-Proxy 319 13.7.2 在微服务中访问Sharding-Proxy 322 13.7.3 配置读写分离 323 13.7.4 配置数据加密 325 13.7.5 配置影子数据源 326 13.8 小结 329 第14章 分布式缓存数据库:Redis 330 14.1 Redis简介 330 14.2 安装和启动Redis 331 14.3 在微服务中访问Redis 333 14.4 Redis数据类型 334 14.4.1 读写list类型数据 334 14.4.2 读写set类型数据 335 14.4.3 读写zset类型数据 337 14.4.4 读写hash类型数据 338 14.4.5 序列化Java对象 339 14.5 Redis集群 340 14.5.1 主从模式 340 14.5.2 哨兵模式 341 14.5.3 集群模式 343 14.5.4 搭建Redis集群 343 14.6 在微服务中访问Redis集群 345 14.7 小结 345 第15章 分布式任务调度框架:XXL-JOB 346 15.1 安装和运行XXL-JOB 347 15.1.1 创建XXL-JOB的数据库 347 15.1.2 配置XXL-JOB调度中心 348 15.1.3 运行和访问XXL-JOB调度中心 349 15.1.4 配置XXL-JOB执行器 350 15.1.5 运行XXL-JOB执行器 352 15.2 创建GLUE任务 352 15.3 创建BEAN模式的任务 356 15.3.1 任务的初始化和销毁 358 15.3.2 带参数的任务 359 15.4 执行器集群和分片执行的BEAN模式任务 362 15.5 搭建调度中心的集群 365 15.6 小结 366