内容简介
本书主要是围绕构建分布式系统架构的“中间件”开发实战展开。开篇介绍了分布式系统架构的相关知识要点,包括其功能、作用以及演进历程,并由此引出了分布式中间件的相关介绍;紧接着是重点介绍了目前在实际生产环境中应用比较广泛的几款Java中间件,包括缓存中间件Redis、消息中间件RabbitMQ、统一协调管理中间件ZooKeeper以及综合中间件Redisson等,详尽介绍了这几款中间件的基本概念、典型应用场景以及相应的功能组件。值得一提的是,在介绍这几款中间件的理论知识时,本书还以微框架Spring Boot作为基础,整合相关中间件的依赖,结合作者的实际项目业务场景进行代码实战。 本书以代码实战为主,理论为辅,特别适用于初次接触中间件的*发者;而对于有一定Java应用开发经验的工程师而言,通过本书也能了解中间件在构建企业级应用系统的过程中所提供的解决方案和思路。
目录
- 走进分布式中间件 01
- 1.1 分布式系统概述 01
- 1.1.1 分布式系统定义 02
- 1.1.2 分布式系统发展历程 02
- 1.1.3 分布式系统特性 05
- 1.1.4 分布式系统常见问题 06
- 1.2 分布式中间件概述 06
- 1.2.1 分布式中间件简介 06
- 1.2.2 常见中间件介绍 07
- 1.3 本书核心知识要点 08
- 1.4 本书实战要求与建议 09
- 搭建Spring Boot微服务项目 11
- 2.1 Spring Boot概述 11
- 2.1.1 什么是Spring Boot 11
- 2.1.2 Spring Boot的优势 12
- 2.1.3 Spring Boot的特性 13
- 2.2 搭建规范与搭建流程 14
- 2.2.1 Spring Boot项目的搭建规范 14
- 2.2.2 Spring Boot项目的搭建流程 15
- 2.2.3 写个“Hello World”吧 30
- 2.3 总结 33
- 缓存中间件Redis 34
- 3.1 Redis概述与典型应用场景介绍 34
- 3.2 Redis的使用 36
- 3.2.1 快速安装Redis 36
- 3.2.2 在Windows环境使用Redis 38
- 3.2.3 Spring Boot项目整合Redis 41
- 3.2.4 Redis自定义注入Bean组件配置 42
- 3.2.5 RedisTemplate实战 44
- 3.2.6 StringRedisTemplate实战 49
- 3.3 Redis常见数据类型实战 52
- 3.3.1 字符串 52
- 3.3.2 列表 55
- 3.3.3 集合 57
- 3.3.4 有序集合 58
- 3.3.5 哈希存储 61
- 3.3.6 Key失效与判断是否存在 65
- 3.4 Redis实战场景之缓存穿透 68
- 3.4.1 什么是缓存穿透 68
- 3.4.2 缓存穿透的解决方案 69
- 3.4.3 实战过程 70
- 3.4.4 其他典型的问题介绍 79
- 3.5 总结 80
- Redis典型应用场景实战之抢红包系统 81
- 4.1 整体业务流程介绍 81
- 4.1.1 抢红包系统业务流程 82
- 4.1.2 业务流程分析 82
- 4.1.3 业务模块划分 84
- 4.2 数据库设计与环境搭建 85
- 4.2.1 数据库设计 85
- 4.2.2 开发环境搭建 88
- 4.2.3 开发流程介绍 103
- 4.3 “红包金额”随机生成算法实战 107
- 4.3.1 随机数算法 108
- 4.3.2 红包随机金额生成算法要求 109
- 4.3.3 二倍均值法简介 109
- 4.3.4 红包随机金额生成算法实战 111
- 4.3.5 红包随机金额生成算法自测 113
- 4.4 “发红包”模块实战 115
- 4.4.1 业务模块分析 115
- 4.4.2 整体流程实战 117
- 4.4.3 业务模块自测 127
- 4.5 “抢红包”模块实战 129
- 4.5.1 业务模块分析 129
- 4.5.2 整体流程实战 130
- 4.5.3 业务模块自测 135
- 4.5.4 小结 139
- 4.6 JMeter压测高并发抢红包 140
- 4.7 问题分析与优化方案实战 146
- 4.7.1 问题分析 147
- 4.7.2 优化方案介绍 148
- 4.7.3 优化方案之Redis分布式锁实战 148
- 4.7.4 不足之处 152
- 4.8 总结 153
- 消息中间件RabbitMQ 154
- 5.1 RabbitMQ概述 154
- 5.1.1 认识RabbitMQ 155
- 5.1.2 典型应用场景介绍 156
- 5.1.3 RabbitMQ后端控制台介绍 162
- 5.1.4 基于Spring的事件驱动模型实战 164
- 5.2 Spring Boot项目整合RabbitMQ 169
- 5.2.1 RabbitMQ相关词汇介绍 170
- 5.2.2 Spring Boot项目整合RabbitMQ 171
- 5.2.3 自定义注入配置Bean相关组件 172
- 5.2.4 RabbitMQ发送和接收消息实战 177
- 5.2.5 其他发送和接收消息方式实战 184
- 5.3 RabbitMQ多种消息模型实战 191
- 5.3.1 基于FautEchange的消息模型实战 191
- 5.3.2 基于DirectEchange的消息模型实战 201
- 5.3.3 基于TopicEchange的消息模型实战 209
- 5.4 RabbitMQ确认消费机制 218
- 5.4.1 消息高可用和确认消费机制 218
- 5.4.2 常见确认消费模式介绍 221
- 5.4.3 基于自动确认消费模式实战 223
- 5.4.4 基于手动确认消费模式实战 232
- 5.5 典型应用场景实战之用户登录成功写日志 240
- 5.5.1 整体业务流程介绍与分析 241
- 5.5.2 数据库设计 242
- 5.5.3 开发环境搭建 254
- 5.5.4 基于TopicEchange构建日志消息模型 259
- 5.5.5 异步发送和接收登录日志消息实战 261
- 5.5.6 整体业务模块自测实战 267
- 5.6 总结 270
- 死信队列实战 271
- 6.1 死信队列概述 271
- 6.1.1 死信队列简介与作用 271
- 6.1.2 典型应用场景介绍 274
- 6.2 RabbitMQ死信队列实战 275
- 6.2.1 死信队列专有词汇介绍 276
- 6.2.2 死信队列消息模型实战 277
- 6.2.3 死信队列延迟发送和接收消息实战 284
- 6.3 典型应用场景实战之商城平台订单支付时 292
- 6.3.1 整体业务场景介绍 292
- 6.3.2 整体业务流程分析 294
- 6.3.3 数据库设计 294
- 6.3.4 构建RabbitMQ死信队列消息模型 307
- 6.3.5 Controller层开发生成并失效用户下单功能 312
- 6.3.6 “用户下单支付时”延迟发送和接收实战 320
- 6.3.7 “用户下单支付时”整体功能自测 326
- 6.4 总结 331
- 分布式锁实战 333
- 7.1 分布式锁概述 333
- 7.1.1 锁机制 334
- 7.1.2 分布式锁登场 342
- 7.1.3 典型应用场景介绍 344
- 7.1.4 小结 347
- 7.2 基于数据库实现分布式锁 347
- 7.2.1 乐观锁简介 347
- 7.2.2 乐观锁实战 349
- 7.2.3 JMeter高并发测试乐观锁 364
- 7.2.4 悲观锁简介 371
- 7.2.5 悲观锁实战 372
- 7.2.6 JMeter高并发测试悲观锁 376
- 7.2.7 小结 377
- 7.3 基于Redis实现分布式锁 378
- 7.3.1 Redis温故而知新 378
- 7.3.2 分布式锁的实现流程与原理分析 380
- 7.3.3 基于Redis实战实现分布式锁 381
- 7.3.4 JMeter高并发测试 394
- 7.3.5 小结 398
- 7.4 基于ZooKeeper实现分布式锁 399
- 7.4.1 ZooKeeper简介与作用 399
- 7.4.2 分布式锁的实现流程与原理分析 401
- 7.4.3 Spring Boot整合ZooKeeper 403
- 7.4.4 基于ZooKeeper实战实现分布式锁 407
- 7.4.5 JMeter高并发测试 410
- 7.4.6 小结 412
- 7.5 典型应用场景之书籍*购模块设计与实战 412
- 7.5.1 整体业务流程介绍与分析 412
- 7.5.2 数据表设计与用例设计 414
- 7.5.3 书籍*购核心业务逻辑开发实战 420
- 7.5.4 Jmeter重现“库存卖”的问题 426
- 7.5.5 基于分布式锁实战解决相关问题 427
- 7.5.6 小结 433
- 7.6 总结 434
- 综合中间件Redisson 435
- 8.1 Redisson概述 436
- 8.1.1 Redisson简介与作用 436
- 8.1.2 Redisson的功能特性 438
- 8.1.3 典型应用场景介绍之布隆过滤器与主题 439
- 8.1.4 典型应用场景介绍之延迟队列与分布式锁 444
- 8.1.5 Spring Boot整合Redisson 447
- 8.2 Redisson常见功能组件实战 453
- 8.2.1 布隆过滤器 453
- 8.2.2 发布-订阅式主题 458
- 8.2.3 数据类型之映Map 466
- 8.2.4 数据类型之集合Set 473
- 8.2.5 队列Queue实战 480
- 8.2.6 死信队列实战 486
- 8.2.7 延迟队列实战 496
- 8.3 分布式锁实战 503
- 8.3.1 重温分布式锁 503
- 8.3.2 分布式锁之一次性实战 505
- 8.3.3 分布式锁之可重入实战 511
- 8.4 总结 518
- Redisson典型应用场景实战之高性能点赞 520
- 9.1 整体业务流程介绍与分析 520
- 9.1.1 业务背景介绍 521
- 9.1.2 业务流程介绍与分析 522
- 9.1.3 业务模块划分与数据库设计 525
- 9.2 “点赞”与“取消点赞”作模块实战 533
- 9.2.1 “点赞”与“取消点赞”业务流程分析 533
- 9.2.2 Controller层接收请求信息 536
- 9.2.3 Service层插入、更新并缓存记录信息 540
- 9.2.4 业务模块自测 552
- 9.3 “点赞排行榜”业务模块实战 554
- 9.3.1 “点赞排行榜”业务流程分析 555
- 9.3.2 接收前端请求并触发缓存点赞排行榜 556
- 9.3.3 业务模块自测 560
- 9.4 总结 564
- 总结与回顾 566