Java微服务实战epub

图书网
9085
文章
1112
评论
2020年1月3日21:15:57 评论 11阅读22分54秒

Java微服务实战 作者:赵计刚

Java微服务实战 出版社: 电子工业出版社

Java微服务实战 内容简介

本书分为三部分:基础框架篇(1~6章)、服务框架篇(7~10章)、监控部署篇(11~13章),由浅入深来讲解微服务的相关技术。基础框架篇从微服务架构的基本概念与技术选型出发,详细的介绍了微服务基础框架SpringBoot、自动化API文档生成工具Swagger、动态数据源和缓存系统,并深入的分析了SpringBoot启动过程的核心源码,这一部分是整本书的基础;服务框架篇详细的介绍了服务注册与发现框架Consul、热配置管理框架Archaius、服务降级容错框架Hystrix,以及服务通信框架OkHttp、AsyncHttpClient和Retrofit,这一部分是整本书的核心;监控部署篇详细的介绍了ELK日志系统的实现、Zipkin全链路追踪系统的实现,最后介绍了持续集成与持续部署系统的实现,这一部分是开发运维的部分。

Java微服务实战 目录

第1章 微服务概述 1

1.1 初识微服务 1

1.1.1 什么是微服务 1

1.1.2 为什么需要微服务 2

1.1.3 微服务架构的缺点 3

1.2 微服务中的组件与技术选型 4

第2章 微服务基础框架 10

2.1 SpringBoot的优势 10

2.2 SpringBoot入门 10

2.2.1 搭建项目框架 10

2.2.2 开发第一个SpringBoot程序 11

2.2.3 运行SpringBoot项目 14

2.3 再学一招:使用Maven依赖树验证SpringBoot自动引包功能 15

第3章 微服务文档输出 17

3.1 Swagger概述 17

3.2 如何使用Swagger 17

3.2.1 搭建项目框架 17

3.2.2 SpringBoot集成Swagger 18

3.2.3 分析Swagger生成的API文档 23

3.2.4 使用Swagger进行接口调用 23

3.3 再学一招:使用Lombok消除POJO类模板代码 24

第4章 微服务数据库 26

4.1 单数据源 26

4.1.1 搭建项目框架 26

4.1.2 建库和建表 27

4.1.3 使用Mybatis-Generator生成数据访问层 27

4.1.4 SpringBoot集成Mybatis 29

4.2 多数据源 38

4.2.1 建库和建表 39

4.2.2 使用Mybatis-Generator生成数据访问层 40

4.2.3 结合AbstractRoutingDataSource实现动态数据源 41

4.2.4 使用AOP简化数据源选择功能 47

4.2.5 实现多数据源的步骤总结 48

4.3 再学一招:Mybatis-Generator基本用法 49

第5章 微服务缓存系统 52

5.1 常用的缓存技术 52

5.1.1 本地缓存与分布式缓存 52

5.1.2 Memcached与Redis 53

5.2 Redis2.x客户端分片 53

5.2.1 安装Redis 53

5.2.2 SpringBoot集成ShardJedis 54

5.3 Redis3.x集群 59

5.3.1 搭建Redis集群 59

5.3.2 SpringBoot集成JedisCluster 62

5.3.3 JedisCluster关键源码解析 64

5.4 再学一招:使用GuavaCache实现本地缓存 66

第6章 SpringBoot启动源码解析 69

6.1 创建SpringApplication实例 70

6.1.1 判断是否是Web环境 71

6.1.2 创建并初始化ApplicationInitializer列表 71

6.1.3 创建并初始化ApplicationListener列表 74

6.1.4 初始化主类mainApplicationClass 75

6.2 添加自定义监听器 75

6.3 启动核心run方法 76

6.3.1 创建启动停止计时器 77

6.3.2 配置awt系统属性 78

6.3.3 获取SpringApplicationRunListeners 79

6.3.4 启动SpringApplicationRunListener 80

6.3.5 创建ApplicationArguments 80

6.3.6 创建并初始化ConfigurableEnvironment 81

6.3.7 打印Banner 87

6.3.8 创建ConfigurableApplicationContext 87

6.3.9 准备ConfigurableApplicationContext 89

6.3.10 刷新ConfigurableApplicationContext 91

6.3.11 容器刷新后动作 93

6.3.12 SpringApplicationRunListeners发布finish事件 94

6.3.13 计时器停止计时 94

6.4 再学一招:常用的获取属性的4种姿势 94

第7章 微服务注册与发现 96

7.1 初识Consul 96

7.2 搭建Consul集群 97

7.2.1 安装Consul 97

7.2.2 启动Consul集群 97

7.2.3 启动Consul-UI 99

7.3 使用Consul实现服务注册与服务发现 100

7.3.1 搭建项目框架 100

7.3.2 配置服务注册信息 102

7.3.3 实现服务启动注册 104

7.3.4 实现服务发现 106

7.4 服务部署测试 108

7.4.1 编写测试类 108

7.4.2 服务打包部署 109

7.4.3 运行测试 111

7.5 使用Consul与Actuator实现健康检查 111

7.5.1 健康检查机制 111

7.5.2 健康检查查错思路 111

7.6 再学一招:Consul健康检查分类及原理 112

第8章 微服务配置管理 114

8.1 初识Archaius 114

8.1.1 为什么要使用Archaius 114

8.1.2 Archaius原理 114

8.2 使用Consul-KV实现配置集中管理 115

8.3 使用Archaius实现动态获取配置 116

8.3.1 搭建项目框架 116

8.3.2 创建配置信息读取源 118

8.3.3 实现服务启动时读取配置信息 120

8.3.4 动态获取配置信息 122

8.3.5 将配置信息动态加入Spring属性源的思路 123

8.4 再学一招:Archaius关键源码解析 123

8.4.1 构造动态属性源 123

8.4.2 动态获取属性 127

第9章 微服务进程间通信 129

9.1 常见的三种服务通信技术 129

9.2 创建一个简单的被调用服务 130

9.2.1 搭建项目框架 130

9.2.2 实现一个简单的被调用接口 132

9.3 使用OkHttp实现服务通信 134

9.3.1 搭建项目框架 134

9.3.2 创建OkHttp调用实体类 135

9.3.3 实现服务通信功能 136

9.3.4 SpringBoot指定服务启动端口的三种姿势 138

9.4 使用AsyncHttpClient实现服务通信 139

9.4.1 搭建项目框架 139

9.4.2 创建AsyncHttpClient调用实体类 139

9.4.3 实现服务通信功能 140

9.5 使用Retrofit实现服务通信 141

9.5.1 搭建项目框架 141

9.5.2 创建调用接口并实例化接口 141

9.5.3 实现服务通信功能 143

9.6 再学一招:Retrofit源码解析 143

9.6.1 构造RestAdapter 144

9.6.2 初始化RestAdapter.Builder属性 146

9.6.3 创建RestAdapter实例 149

9.6.4 构造请求方法的接口类 150

9.6.5 校验service接口的合法性 151

9.6.6 使用动态代理创建对象 152

9.6.7 进行请求调用 152

9.6.8 获取RestMethodInfo实例 154

9.6.9 进行方法调用 154

9.6.10 加载RestMethodInfo的剩余属性 156

9.6.11 构建请求参数retrofit.client.Request 160

9.6.12 利用clientProvider进行真正的调用 161

9.6.13 处理响应 162

第10章 微服务降级容错 163

10.1 初识Hystrix 163

10.1.1 为什么要使用Hystrix 163

10.1.2 Hystrix工作原理 164

10.1.3 Hystrix执行流程 166

10.2 使用Hystrix实现服务降级容错 167

10.2.1 搭建项目框架 167

10.2.2 创建AsyncHttpClient调用实体类 170

10.2.3 服务通信框架集成服务降级容错功能 171

10.2.4 验证服务降级容错功能 173

10.3 搭建Hystrix监控系统 176

10.3.1 使用Hystrix-Metrics-Event-Stream发布监控信息 176

10.3.2 使用Hystrix-Dashboard展示监控信息 177

10.3.3 使用Turbine聚合监控信息 179

10.1 再学一招:Hystrix常用配置 184

10.1.1 设置配置参数的两种方法 184

10.4.2 常见配置项的配置方式 184

第11章 微服务日志系统 187

11.1 初识ELK 187

11.1.1 为什么要用ELK 187

11.1.2 ELK最常用的两种架构 188

11.2 搭建ELK系统 189

11.2.1 安装配置启动Redis 190

11.2.2 安装配置启动Elasticsearch 190

11.2.3 安装配置启动Logstash-Shipper 192

11.2.4 安装配置启动Logstash-Indexer 194

11.2.5 安装配置启动Kibana 195

11.3 使用LogbackAppender发送日志 196

11.3.1 搭建项目框架 196

11.3.2 配置logback.xml文件 198

11.3.3 创建LogbackAppender发送日志 199

11.3.4 验证日志输出查询功能 201

11.4 Kibana常见用法 203

11.4.1 日期选择 203

11.4.2 自动刷新 204

11.4.3 查询语法 204

11.5 再学一招:使用Curator定时删除日志 205

11.5.1 安装Curator 205

11.5.2 配置Curator 206

11.5.3 配置crontab定时任务 208

11.5.4 验证定时任务 208

第12章 微服务全链路追踪系统 210

12.1 初识Zipkin 210

12.1.1 为什么要使用Zipkin 210

12.1.2 Zipkin工作流程 211

12.1.3 Zipkin数据模型 213

12.1.4 Zipkin工作原理 213

12.2 使用Zipkin搭建全链路追踪系统 215

12.3 使用Brave + AsyncHttpClient实现全链路追踪 217

12.3.1 搭建项目框架 217

12.3.2 使用服务端拦截器补充追踪信息 219

12.3.3 使用客户端拦截器创建销毁追踪信息 223

12.3.4 使用Zipkin-webUI查询链路追踪信息 225

12.4 使用MySQL持久化追踪信息 227

12.4.1 创建三张追踪信息表 227

12.4.2 使用Brave-MySQL存储追踪信息 230

12.5 使用Brave-OkHttp实现全链路追踪 230

12.5.1 搭建项目框架 231

12.5.2 使用服务端与客户端拦截器收集追踪信息 233

12.6 再学一招:Brave关键源码解析 236

12.6.1 span的生命周期 236

12.6.2 使用reporter创建span 237

12.6.3 使用collector收集span 242

12.6.4 使用collector发送span 244

第13章 微服务持续集成与持续部署系统 248

13.1 初识持续集成与持续部署系统 248

13.2 系统总体架构 249

13.2.1 初识GitLab 249

13.2.2 初识Jenkins 250

13.2.3 初识Docker-Regsitry 250

13.3 持续集成与持续部署系统工作原理 250

13.3.1 使用jar包部署项目的整体流程 250

13.3.2 使用Docker镜像部署项目的整体流程 250

13.4 搭建持续集成与持续部署系统 251

13.4.1 安装启动Docker 251

13.4.2 安装配置启动GitLab 252

13.4.3 安装启动Jenkins 254

13.4.4 配置Jenkins全局信息与安装插件 256

13.4.5 安装配置启动Docker-Registry 257

13.5 使用jar包方式部署服务 258

13.5.1 搭建项目框架 258

13.5.2 使用GitLab创建组和项目 260

13.5.3 使用GitLab管理代码 263

13.5.4 使用Jenkins编译打包服务 264

13.5.5 使用webhook实现服务的持续集成 267

13.5.6 使用Jenkins + Shell实现服务的持续部署 269

13.6 使用Docker镜像方式部署服务 273

13.6.1 搭建项目框架 273

13.6.2 编写Dockerfile文件创建镜像 275

13.6.3 通过Jenkins + Shell使用镜像实现持续部署 276

13.6.4 分析Jenkins构建日志 277

13.7 再学一招:Docker常用命令 278

Java微服务实战 精彩文摘

“微服务”是软件架构大师Martin Fowler提出来的,但至今为止其都没有一个确切的定义。只有在Martin Fowler的官方网站上给出了一段关于微服务架构的说明。该段说明原文如下:

In short,the microservice architectural style is an approach to developing a single application as a suite of small services,each running in its own process and communicating with lightweight mechanisms,often an HTTP resource API.These services are built around business capabilities and independently deployable by fully automated deployment machinery.There is a bare minimum of centralized management of these services,which may be written in different programming languages and use different data storage technologies.

简单来讲,微服务架构风格是将一个单体的应用程序开发拆解为一组“小”的服务,值得注意的是,这里所说的“小”是以业务边界来区分的,而不是根据代码的多少来区分的。每个服务都运行在一个单独的进程中,服务之间通过轻量级的机制进行通信,例如使用HTTP资源接口;每个服务都可以通过全自动化的部署机制来独立部署;微服务中的各个服务可以以多种语言来编写,但是在实际开发中,由于各个公司的技术栈有限,通常会指定一门擅长的技术语言,例如Java;每个服务都可以使用不同数据存储技术,例如MySQL、Cassandra及MongoDB等,但是为了统一,通常各个服务还是会选用同一种存储技术。

为什么需要微服务?通常会将微服务架构和单体架构进行比较。二者的架构图对比如图1-1所示。

左边是单体架构图,右边是微服务架构图。传统的单体架构主要包括三部分:一个展示层,用于将一些信息展示给客户端人员或者为客户端人员提供一些交互页面;一个数据存储层,通常就是提供一个数据库,用于存储一些需要持久化的数据;很后一个部分,是一个服务端的应用程序,该程序主要用于处理请求、执行业务逻辑、操作数据库,以及将相关结果返回给前端等。在该架构中,所有的请求都在一个进程中处理,而且水平扩展也很简单,只需要多添加几台部署了该服务的机器,之后在这些服务器的前边部署一台负载均衡器就可以了。

单体架构有这么几个问题:首先,由于所有的业务逻辑都写在了一个应用 service 中,因此只要对该 service 进行修改,哪怕只是添加一行代码,也需要编译打包部署整个应用,需要的时间会比较久,耗时耗力;其次,假设整个应用中只有一个接口到达了瓶颈,我们想要水平扩展该接口,这个时候只能通过水平扩展整个应用来达到目的;很后,随着应用程序规模的增加,即使我们使用Maven进行模块化开发,也很难保证对于一个模块的修改不会影响其他模块。

为了解决这些问题,微服务架构出现了!在微服务架构中,我们将一个整体应用切分成了多个小的服务,这些小服务可以独立部署并且每个服务运行在自己的进程中,所以如果修改了一个服务的代码,那么我们只需要单独部署该服务就行,而且如果需要水平扩展一个服务的接口,只扩展该服务就可以了。

图书网:Java微服务实战epub

恭喜,此资源为免费资源,请先
声明:本站所有资源收集于互联网,只做学习和交流使用,版权归著作人和出版社所有,请在下载后24小时之内自觉删除,若作商业用途,请购买正版,由于未及时购买和付费发生的侵权行为,与本站无关。本站发布的内容若侵犯到您的权益,请联系站长删除,我们将及时处理!
继续阅读
  • 我的微信
  • 扫一扫加好友
  • weinxin
  • 微信公众号
  • 扫一扫关注
  • weinxin
PyQt 5快速开发与实战epub 程序设计

PyQt 5快速开发与实战epub

《PyQt5快速开发与实战》是介绍PyQt 5理论与实战的前沿书籍,即系统化地介绍Qt的基础知识,又兼顾Python的各种强大模块,同时包含丰富的项目实战。旨在帮助读者快速掌握Py...
PHP7内核剖析epub 程序设计

PHP7内核剖析epub

适读人群 :本书适用于有一定C语言基础的PHP高级工程师,或者想了解PHP7的内部实现、扩展开发的工程师。 基于PHP7,深刻揭示内核原理 内容翔实,详细介绍PHP语言底层的实现 ...
跟老齐学Python Django实战epub 程序设计

跟老齐学Python Django实战epub

适读人群 :Python开发人员,程序设计爱好者。 专注于实战,以项目为主线,帮助读者轻松掌握Python应用。 轻松幽默,毫无做作晦涩之感,让编程不枯燥,不乏味。 指导读者理解P...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: