内容推荐 本书以技术新手阿云的巧妙提问和答主的点睛指导为引线,以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框架的基本用法和微服务开发的核心思想。本书还可作 目录 第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 |