标签分类
当前位置:首页 > 程序设计电子书 > Java实战电子书网盘下载
Java微服务实战 Java微服务实战
42972113

42972113 提供上传

资源
26
粉丝
25
喜欢
195
评论
8

    Java微服务实战 PDF 全书超清版

    Java实战电子书
    • 发布时间:

    给大家带来的一篇关于Java实战相关的电子书资源,介绍了关于Java、微服务、实战方面的内容,本书是由电子工业出版社出版,格式为PDF,资源大小43.2MB,赵计刚编写,目前豆瓣、亚马逊、当当、京东等电子书综合评分为:9.6,更多相关的学习资源可以参阅 程序设计电子书Java视频、等栏目。

  • Java微服务实战 PDF 下载
  • 下载地址:https://pan.baidu.com/s/1UeG7B8pbsAb4ZwUJatG1qw
  • 分享码:9013
  • Java微服务实战 PDF

    这书分成三一部分:基本架构篇(1~6章)、服务项目架构篇(7~10章)、监控器布署篇(11~13章),循序渐进来解读微服务的有关技术性。基本架构篇从分布式架构的基本要素与技术性电机选型来看,详尽的详细介绍了微服务基本架构SpringBoot、自动化技术API文本文档转化成专用工具Swagger、动态性数据库和缓存文件系统软件,并深层次的剖析了SpringBoot起动全过程的关键源代码,这部分是一本书的基本;服务项目架构篇详尽的详细介绍了服务项目申请注册与发觉架构Consul、热配置管理架构Archaius、服务项目退级试错架构Hystrix,及其服务项目通讯架构OkHttp、AsyncHttpClient和Retrofit,这部分是一本书的关键;监控器布署篇详尽的详细介绍了ELK系统日志系统软件的保持、Zipkin全外链跟踪系统软件的保持,*后详细介绍了持续集成与不断布署系统软件的保持,这部分是开发设计运维管理的一部分。

    目录

    • 第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

    上一篇:新商业模式创新设计:当资本插上“互联网+”的翅膀  下一篇:Boost程序库完全开发指南:深入C++ “准”标准库

    展开 +

    收起 -

    码小辫二维码
     ←点击下载即可登录

    Java实战相关电子书
    学习笔记
    网友NO.171411

    Java多线程实战之交叉打印的两种方法

    要求效果:先打印5次“printA…”,再打印5次“printB…”,每次打印间隔1秒,重复循环20次 方式一:使用wait()和notifyAll()方法 public class MyService { private volatile boolean flag = false; public synchronized void printA() { try { while (flag) { wait(); } for (int i = 0; i 5; i++) { System.out.println("printA..."); TimeUnit.SECONDS.sleep(1); } flag = true; notifyAll(); } catch (InterruptedException e) { e.printStackTrace(); } } public synchronized void printB() { try { while (!flag) { wait(); } for (int i = 0; i 5; i++) { System.out.println("printB..."); TimeUnit.SECONDS.sleep(1); } flag = false; notifyAll(); } catch (InterruptedException e) { e.printStackTrace(); } }} public class BackupA implements Runnable { private MyService myService; public BackupA(MyService myService) { super(); this.myService = myService; } @Override public void run() { myService.printA(); }} public class BackupB implements Runnable { private MyService myService; public BackupB(MyService myService) { super(); this.myService = myService; } @Override public void run() { myService.printB(); }} public class Run { public static void main(String[] args) { MyService myService = new MyService(); for (int i = 0; i 20; i++) { new Thread(new BackupA(myService)).start(); new Thread(new BackupB(myService)).start(); } }} 方式二:使用await()和signalAll()方法 public class MyService { private Lock lock = new ReentrantLock(); private Condition condition = lock.newConditi……

    网友NO.922354

    Java多线程编程实战之模拟大量数据同步

    背景 最近对于 Java 多线程做了一段时间的学习,笔者一直认为,学习东西就是要应用到实际的业务需求中的。否则要么无法深入理解,要么硬生生地套用技术只是达到炫技的效果。 不过笔者仍旧认为自己对于多线程掌握不够熟练,不敢轻易应用到生产代码中。这就按照平时工作中遇到的实际问题,脑补了一个很可能存在的业务场景: 已知某公司管理着 1000 个微信服务号,每个服务号有 1w ~ 50w 粉丝不等。假设该公司每天都需要将所有微信服务号的粉丝数据通过调用微信 API 的方式更新到本地数据库。 需求分析 对此需求进行分析,主要存在以下问题: 单个服务号获取粉丝 id,只能每次 1w 按顺序拉取 微信的 API 对于服务商的并发请求数量有限制 单个服务号获取粉丝 id,只能每次 1w 按顺序拉取。这个问题决定了单个公众号在拉取粉丝 id 上,无法分配给多个线程执行。 微信的 API 对于服务商的并发请求数量有限制。这点最容易被忽略,如果我们同时有过多的请求,则会导致接口被封禁。这里可以通过信号量来控制同时执行的线程数量。 为了尽快完成数据同步,根据实际情况:整个数据同步可分为读数据和写数据两个部分。读数据是通过 API 获取,走网络 IO,速度较慢;写数据是写到数据库,速度较快。所以得出结论:需要分……

    网友NO.696173

    java枚举类的属性、方法和构造方法应用实战

    本文实例讲述了java枚举类的属性、方法和构造方法应用。分享给大家供大家参考,具体如下: 一 点睛 枚举类也是一种类,只是它是一种比较特殊的类,因此它一样可以使用属性和方法。 枚举类通常应该设计成不可变类,也就说它的属性值不应该允许改变,这样会更安全,而且代码更加简洁。为此,我们应该将枚举类的属性都使用private final修饰。 一旦为枚举类显式定义了带参数的构造器,则列出枚举值时也必须对应地传入参数。 二 简单枚举类实战 1 代码 Gender.java public enum Gender{ MALE,FEMALE; // 定义一个public修饰的实例变量 public String name;} GenderTest.java public class GenderTest{ public static void main(String[] args) { // 通过Enum的valueOf()方法来获取指定枚举类的枚举值 Gender g = Enum.valueOf(Gender.class , "FEMALE"); // 直接为枚举值的name实例变量赋值 g.name = "女"; // 直接访问枚举值的name实例变量 System.out.println(g + "代表:" + g.name); }} 2 运行 FEMALE代表:女 三 better枚举类实战 1 代码 Gender.java public enum Gender{ MALE,FEMALE; private String name; public void setName(String name) { switch (this) { case MALE: if (name.equals("男")) { this.name = name; } else { System.out.println("参数错误"); return; } break; case FEMALE: if (name.equals("女")) { this.name = name; } else { System.out.println("参数错误"); return; } break; } } public St……

    网友NO.520501

    Java Runtime用法实战案例

    本文实例讲述了Java Runtime用法。分享给大家供大家参考,具体如下: 一 代码 public class GetRuntimeInfo{ public static void main(String args[]) { @SuppressWarnings("unused") Runtime run = Runtime.getRuntime(); // 单例设计 String str = ""; //定义一个字符串 for (int x = 0; x 5000; x++) { str += x; // 垃圾产生 } System.out.println("1、最大可用内存:" + run.maxMemory()); System.out.println("1、总共可用内存:" + run.totalMemory()); System.out.println("1、最大可用内存:" + run.freeMemory()); System.out.println("1、可用处理器数:" + run.availableProcessors()); run.gc(); // 清除垃圾 System.out.println("------------------------------------"); System.out.println("2、最大可用内存:" + run.maxMemory()); System.out.println("2、总共可用内存:" + run.totalMemory()); System.out.println("2、最大可用内存:" + run.freeMemory()); System.out.println("2、可用处理器数:" + run.availableProcessors()); }} 二 运行结果 1、最大可用内存:3797417984 1、总共可用内存:324534272 1、最大可用内存:222440504 1、可用处理器数:4 ------------------------------------ 2、最大可用内存:3797417984 2、总共可用内存:324534272 2、最大可用内存:321123952 2、可用处理器数:4 更多java相关内容感兴趣的读者可查看本站专题:《Java进程与线程操作技巧总结》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总……

    Copyright 2018-2019 xz577.com 码农之家

    版权责任说明