05 2020 档案
摘要:这是iview的menu的组件 http://v3.iviewui.com/components/menu 每一个菜单的item 实际的项目中,菜单往往是根据后台的数据返回回来的。往往是一个数组,通过这里,遍历然后循环生成的这个菜单,而不是这样写死的、 这个时候就用到了递归组件, 先来添加一个示例页
阅读全文
摘要:官方文档 jsx: https://cn.vuejs.org/v2/guide/render-function.html#JSX 函数式组件 https://cn.vuejs.org/v2/guide/render-function.html#%E5%87%BD%E6%95%B0%E5%BC%8F%
阅读全文
摘要:本节代码对照: https://github.com/lison16/vue-cource/blob/master/src/components/split-pane/split-pane.vue https://github.com/lison16/vue-cource/blob/master/s
阅读全文
摘要:通过封装一个小的组件,如何在Vue中使用第三方的js库。 数字动画的库,把它封装成一个vue的组件。 http://inorganik.github.io/countUp.js/ CountUp官方地址 https://github.com/inorganik/CountUp.js 官方推荐的vue
阅读全文
摘要:https://github.com/lison16/vue-cource/blob/master/src/mock/mock.doc.md 用mock.js对ajax请求作出拦截,并响应 拦截ajax请求,并 且作出响应 mockJs的用法,详细介绍 响应模拟 精简版的文档 在这里引进了mock并
阅读全文
摘要:node服务端 node服务端代码:https://github.com/lison16/vue-cource/tree/master/server npm install先安装依赖。然后npm run start即可访问端口是3000 http://localhost:3000/ 把下面这段代码注
阅读全文
摘要:插件 store下面添加plugin插件文件夹 想定义一个持久化存储的插件。当你每次刷新浏览器的时候,store里面存的状态都会被清除,因为它是存在内存中的,而不是存在本地的。你一刷新他就没了。但是有时候我们希望将一些东西存在本地。这样用户刷新页面,内容不会丢失。所以我们来定义一个简单化存储的插件。
阅读全文
摘要:getter相当于vuex里面的计算属性。 在vue组件中如果我们要触发一个全局的状态更新的话,中间其实还缺少一条线。如果我们的操作不具有异步操作的话,可以不走action,可以直接在vue组件中通过cmmitMutations来提交一个状态的改变。然后接着走下面的流程。 当我们在组件中需要自己改v
阅读全文
摘要:总结 总结: 默认获取state里面的数据 // 获取state里面的appNameappName () { return this.$store.state.appName },// 获取user模块下的state里面的userName userName () { return this.$sto
阅读全文
摘要:状态管理,项目不是很复杂是个简单的项目时,状态管理我们可以使用bus来满足需求。 父子组件之间如何通讯,使用bus多个组件之间的通讯 新建页面store.vue 在路由列表中注册 在components下创建Ainput.vue。A是一个统一的前缀。 我们需要把编辑更改后的值传出去, 使用事件。触发
阅读全文
摘要:总结 beforeRouteUpdate调用时候,实际上这个组件已经被渲染了。所以在里面使用this是可以访问到当前这个vue实例的。beforeRouteUpdate(to,from,next) { //里面可以用this}beforeRouteLeave的时候,当你要离开的时候,你的整个页面也是
阅读全文
摘要:之前我们把路由拆成了下面两个文件。router.js里面配置路由列表,index.js里面我们创建路由实例。之后讲到高级篇路由守卫,也是在index.js内去添加。 首先在index.js里面把vue-router和路由列表引进来。 Router作为一个插件。需要使用Vue.use方法把它加载进来。
阅读全文
摘要:课程地址: https://ke.segmentfault.com/ls/1650000016221751 课程代码地址: https://github.com/lison16/vue-cource jenkins和nginx docker 配置教程: http://note.youdao.com/
阅读全文
摘要:vue-cli2.0和 vue cli3.0是有天壤之别的,主要得益于webpack4的零配置。vue-cli3.0创建项目,不再需要我们去书写庞杂的webpack配置,我们基本实现,什么都不用配置就可以启动、编译、打包我们的项目, 我们使用vue ui来创建项目,vue ui是vue cli3.0
阅读全文
摘要:弹性的计算服务 阿里双11购买的,比较便宜 结束
阅读全文
摘要:然后会让你选择语言 我们就用默认的英文 也是默认的 美式英语键盘 定位服务,默认也是开启的 skip跳过。 算是一个帮助文档吧 关闭 用户的home目录。 左上角有菜单 菜单里面有不同的子菜单 这里可以快速的进入到某些文件夹 这里是日期 电池状态,和连接的网络。用户名是oscar 关闭系统或者是重启
阅读全文
摘要:https://www.virtualbox.org/wiki/Downloads win10可能需要开启虚拟化的技术。 https://jingyan.baidu.com/article/ff42efa9568165819f220276.html 新建虚拟机 默认的选项、 用固定代销的创建的虚拟机
阅读全文
摘要:之前课程用的版本 centOS8出的第一个版本,可能会有一些问题。 https://developer.aliyun.com/mirror/ http://mirrors.163.com/ 结束
阅读全文
摘要:开机windows的标志 主板的图示 1984 结束
阅读全文
摘要:这些是全局的路由 这个是做监控用的 生产环境中比较常见的局部的filter。不仅是对请求进行判断和过滤,更多的是除了这个事情还做了一些增强华的处理。 微服务防止被工具,请求都需要安全认证,网管自己安全认证的信息放在请求头里面。 AddRequestHeader的源码 exchange取出来。conf
阅读全文
摘要:复制进来提前准备好的类 去掉一些没有用到的包 类名的结尾 继承类,并自定义Config Config是来承载我们的参数的 自定义请求的一个name和value。当name和value都能匹配的上的时候,就返回true继续往下走。匹配不上就报错。这个绝大多数我们不是在parameter里面做的 巨大多
阅读全文
摘要:一种全局的一种局部的两种filters. 提前准备的 常见的全局一般就是日志记录。GlobalFilter是gateway提供给我们的,Ordered是Spring提供给我们的。 filter是分前后顺序的,先入后出,后入先出的特性。所以需要实现ordered的接口。 越小越早进入,越晚出去。 这是
阅读全文
摘要:所有走gateway的都必须走这种filter就是全局,比如说我的负载均衡。 局部就是针对某个路由,那行一次单独的处理。 结束
阅读全文
摘要:全局的搜索一下 这个就是自定义的After 最大的区别和我们上一节课写的自定义的类的区别在这里。这是JDK8给我们提供的日期时间。 预定义的都在这里 判断下请求的Method是不是一样的 用的比较多的是 Method和Path jwt为啥没用header呢。绝大多数在网关就会把这层匹配掉。所以一般不
阅读全文
摘要:先来做一次自定义让大家来感受一下 这里提前给大家准备好的一个类 创建两个目录一个是conf、predicates 首先这里是有一个static的内部类 前端是断言的名字,后面是断言的值 上面的断言的值,谁来承载它呢?config里面的属性值来承载,我们是判断当前时间,有没有在写的时间之后, 我们在这
阅读全文
摘要:默认就是启动处理的,所以不需要做什么Enable的引入。配置上代码就可以用。 id就是给route起名字。就是给某个router起名字。 表示我们这里有这样一个路径。如果这个路径是以jiangzh为开头,斜线什么什么东西的时候,它就会转到我们的uri上,这其实就是个路由的信息。 配置端口号 起个ap
阅读全文
摘要:Gateway依赖webflux,但是它对SpringMvc是兼容的。 我们在父工程里面,有写过这么一个StartWeb。当时来讲,我们所有的模块都需要,但是目前来讲我们已经有了冲突的模块了。 所以首先我们要把starter-web移动到其他的子模块里面。 给挨个的模块都加一下 zuul模块 cin
阅读全文
摘要:弥补了Zuul的不足,第二是Spring官方提供的,官方有意把他变成SpringCloud的标准组件 这是GateWay的两大核心组件。 两个核心的组件一个是Handler Mapping 一个是Web Handler。Srping非常喜欢在Map层写handler、映射、然后紧接着把handler
阅读全文
摘要:和zuul本质上是做的一样的事情。但是特性上会有一些区别。 结束
阅读全文
摘要:所有的配置文件都在vhost下 注意修改了配置文件是需要重启的 直接用名字重启,镜像重启就相当于机器重启了一下。所以nginx也就会重启。 重启后,它就会这几个配置文件弄到我们的nginx里面,就可以使用了。生效会有一定的延迟。 注意访问的域名这里有个字母e,容易写错www.codeing-jian
阅读全文
摘要:文件现在已经都上传到服务器上了。 先back目录,把我们两个客户端启起来。console这个我们之前已经启动过了。,这是我们后台的后端。 下面我们来看下我们的backend 里面这些东西都准备好了。直接打镜像就可以了。 注意,我们的镜像名字不能乱起 这个启动命令只认,film-backend 它的版
阅读全文
摘要:console我们已经部署过了。下面就是backend 这里面几乎没有大家需要修改的内容。 前端本身是基于dubbo部的。dubbo需要一个单独的注册中心,这里用的注册中心是zookeeper 这里打的二进制的jar包。这个课程是dubbo课程的实战源码,由于没有办法把源码给大家。这里只能给大家搭建
阅读全文
摘要:前端的文件夹统一叫做front。这面包含了前台和后台的两个前端。 www是猫眼的前台,admin是运营后台。 build是编译脚本,entrypoint是运行脚本,mettingfilm-admin.tgz是前端的压缩包 node就是前端的运行环境, start.sh:启动容器镜像的脚本。 第一个文
阅读全文
摘要:下面就来构建环境,为了给大家节省时间,我这里这里已经把之前准备的内容都复制到这个目录下了。 至于是怎么复制进来的呢?需要安装这个软件。这样你就可以往服务器做一些拷贝了。linux上安装这插件 yum install -y lrzsz 输入rz就可以选择本地的文件了。 sz是拷贝一些东西到本地。 只需
阅读全文
摘要:数据库是docker做安装,应用也是docker来安装,所以数据库这里的配置不能写成这个样子 容器之间是不能通过127.0.0.1去访问的,虽然他们都是在同一台机器上。但是他们是两个完全不同的两个虚拟环境。 这些都是要变化的,所以我们要考虑多环境。 首先我们有两种方式可以去做,一种方式是Spring
阅读全文
摘要:nginx所有的配置都在它的配置文件里。而我们不能每次都进入我们的docker环境一点点的改。,我们更希望它的配置文件在一个更方便修改的地方。所以一般我们会把这个配置文件,放在我们的宿主机上。这样我们改起来会更方便一些。 首先来安装Nginx。它的包比较小,所以下载应该比较快。 sudo docke
阅读全文
摘要:这次安装的是MySql5.7的版本 docker pull mysql:5.7 安装完成后可以通过docker img的形式去看。 docker run -itd --name jiangzh_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysq
阅读全文
摘要:我们本地开发的实际上是猫眼的后端 5个圈出来的黑子分别代表的是2级域名 访问的逻辑,首先所有的访问都经过Nginx。Nginx会进行转发, 如果是www开头的域名就会转发到猫眼前台前端 每一个前端和后端都会有一个独立的镜像 数据库和Nginx也会分别用一个镜像 结束
阅读全文
摘要:阿里云的官方技术社区的文章 默认安装后不是启动的状态,需要用下面的命令启动docker 安装完成后 启动docker 检查看看是否是启动成功了 打印出来一堆东西,就表示docker安装成功了。 结束
阅读全文
摘要:打开Xshell 新建会话 这样就链接到服务器了 首先是改一下字体的大小和白底黑字 字体大小设置为20 配色方案 结束
阅读全文
摘要:docker部署,屏蔽底层环境。 这次部署有四套工程,2套后端,2套前端。后端都是微服务,双核8G跑起来都比较吃力。 所以复制器至少是要2台 双核8G的服务器。 所以推荐大家本地用VMware安装。 内网穿透的app,花生壳更专业一些,一年1千元左右。 ECS可以理解为在公司使用的小型机 已经买过的
阅读全文
摘要:Docker镜像其实是一个篮子,它里面装的就是我们dockerfile构建的内容,但是它自己本身不关心里面是什么,它就是这么一个镜像文件,或者叫做一个篮子,你可以把镜像拿到任何的一个地方运行,都可以达到同等的效果,比如说我们在windows上跑起来eurekaServer,紧着我们到linux上同样
阅读全文
摘要:下面就来过一下生成docker镜像 build -t:表示我现在要构建一个docker镜像,而这个镜像的名字叫做meetingfilm-backend 它的版本号是1.0。最后的点就是让它在当前目录下寻找dockerfile文件, 个人习惯用git Bash 复制进来。如果是第一次构建,事件会比较长
阅读全文
摘要:首先需要编写DokcerFile文件 整体的三个步骤 FROM指令,相对比较特殊。docker里面的东西理论上都是运行在操作系统之上的。所以一般我们docker都会有基础镜像,这些基础镜像大部分都是以比如说centOS、linux啊、windows啊类似于这样的东西为主。 涉及到docker里面的分
阅读全文
摘要:docker仓库 例如我们搜一个MySql 提供了各种版本 DockerFile用来编写如何生成docker镜像的文件。 容器具体跑起来的MySql的实例。我们通过访问容器就可以使用MySql 国外的域名改成国内的。 结束
阅读全文
摘要:https://www.runoob.com/docker/windows-docker-install.html 安装完成后。 桌面右下角也会有个图标 需要做一些调整,因为docker对windows的支持非常不友好。所以安装后,要选中这个Switch to linux containers选项。
阅读全文
摘要:轻量的虚拟化。docker是进程级别的虚拟化技术。理论上你机器上的一个进程,这个进程里面存了一台虚拟机。 结束
阅读全文
摘要:linux环境后面会去说,这次主要是构建windows下的环境 结束
阅读全文
摘要:自动化测试里面,两个方法怎么才能联动起来。SpringCloud是存在的,SpringCloud2是不存在的 然后给方法注入数据 传入的filmName放在这里去判断。 把输出的日志放在外面 这样就把下面方法写的值,按照顺序传入films这个测试方法。 执行了两次 再这里再加一段输出 再次测试 作业
阅读全文
摘要:这里改成用String接收,因为一会解析的时候要用json去解析,直接转对象会比较麻烦, 把这个对象类全部复制过来。 使用fastjson 把films转换成java的类 判断计数器是否为1 执行这个测试方法、。filmName为空了 这里没有返回filmName 加上filmName 结束
阅读全文
摘要:模拟电影添加的方法 自定义这样一个对象,这是测试add方法需要的传的vo对象 把原来的属性都复制过来。加上@Data生成getter和setter 填写每个属性的值 打印结果对象 启动eurekaServer和film这两个服务 直接运行这个测试方法 执行成功了的,但是后台给了一个时间格式错误的信息
阅读全文
摘要:启动eurekaServer和film这两个服务 假设我们就开始做模块测试 创建测试类 创建common包 创建RestUtils 使用restTemplate来访问films电影列表,url我们先写死,后面就是考虑要不要转成对象。 复制common里面utils包的引入 testng项目引入uti
阅读全文
摘要:测试报告准备好了这三个文件 首先是依赖包 版本号提取出来 因为我们这里用的是dependencyManagement,它并不会真的加载包,它只是做一个包管理,所以这里我们目标是只是让maven帮我们管理版本,这样在出现版本编程的时候,只需要改一个项目的配置,底下的我们就不需要管。 放到testng的
阅读全文
摘要:常见的注解 引入日志,在方法上加@Test方法,里面日志输出一段话 除了第一个,其他的都改成info输出日志。 再来执行 这写错了修正一下 再次运行测试 加一个test02的方法 再来测试 boforeMethod和afterMethod永远在方法之前和之后运行一遍。 boforeClass是在测试
阅读全文
摘要:构建演示环境 先复制groupId 创建模块 改模块的名称 都改成下划线的形式 这是改完后的 删除这三个文件,这是没有用的 复制日志的配置文件 配置文件修改为yml格式 日志的配置 父工程引入这个模块 修改父工程为show 清空默认的依赖 引入包,在父工程引入 把版本的依赖放上面去 再复制到show
阅读全文
摘要:testEG开发式的自动化编程,和开发息息相关,同时给我们减轻了很多工作压力。 结束
阅读全文
摘要:我们要解决的是eurekaServer的安全问题, 这是准备的资料 首先是引入包,然后是配置安全信息 superuser代表的是超级管理员 配置 两项配置,一个是security的配置, 以后再注册eurekaServer的服务就不能再这么去注册了。 用户名+密码+@localhost。这样它在解析
阅读全文
摘要:eureka server上存了很多的敏感数据 结束
阅读全文
摘要:提前准备好的Filter 生产环境我们往往是这么配置。允许某个域名跨域访问, 而不是所有的域名都允许跨域 跨域的时候一定允许Options访问,因为它的跨域请求是首先来探测一下,options请求先来探测一下,访问一下能不能跨域访问,如果可以,真正的请求才会过来,如果你只允许get,代表前面的那一次
阅读全文
摘要:我们先来看前三步 首先启动这些服务 首先是登陆 查询影片 先把zuul的fallback注释掉 重启zuul网关,再测试 我们的authorization写的是不对的。但是请求还是查到了数据 jwtFilter没有注入Spring进去管理,所以没有用到。 未登陆一般是返回401 写上争取的jwt。B
阅读全文
摘要:jwt具体的实现,有点复杂,所以提前准备好了代码。 首先是渲染json对象, 代码复制到JwtFilters最下面。 jwt的工具类和jwt属性类。 JwtProperties里面有一些配置信息。 前置准备 验证token有效性 需要做两步,一是有没有token,二是token的有效。 请求的时候并
阅读全文
摘要:在user里面,我们已经做了token的颁发 生成token里面加了两个东西一个userId一个randomKey 这里还加了创建时间和过期时间 jwt的数据签名,假设用的是AES算法, 算法需要元数据+盐 把randomkey返给前端,前端要拿我要传数据的做一次加密,也就是我们常说的签名,把tok
阅读全文
摘要:身份认证才是jwt最核心的内容,用户信息放在jwt内,一般不会把整个的用户信息放在jwt里面,大部分放的都是一些非敏感的数据,例如用户名和密码是敏感的,那么我把userid给你,这是非敏感的数据, jwt加密,是需要盐的。有盐的加密更可靠更安全,这个时候盐就类似于我们的密码本。 到了服务端,拿到jw
阅读全文
摘要:总结 RequestContext是线程安全的。 面试点 Hystrix整合 fallBack怎么处理。 头信息 结束
阅读全文
摘要:这几个模块做整合。cinema是作为作业留给大家的。 user模块 首先先把配置文件做整合。复制eureka的依赖 开启eureka的支持 配置 复制准备好的代码 还有一个Application Name 放到Spring的下面 这样user的微服务就整合完成了。 zuul整合 首先是prefilm
阅读全文
摘要:为了做演示,film这里改造一下 复制这里之前写的打印header的代码 改成用error打印 把上一节做的超时时间,改的长一点 重启film服务。Zuul不需要重启,因为它什么也没改。 我们film服务打印的内容 我们访问的时候加上Authorization Zuul收到了。但是film服务没有收
阅读全文
摘要:Hystrix的降级稍微有点麻烦,所以这里提前准备了类。 创建fallbackas的包 把准备好的类复制进来 可以针对某一类请求,进行统一降级。 可以写returen * 代表所有的路由 我们要自己组装一个ClientHttpResponse 设置返回体,设置header头。和我们自己组装了一个Ht
阅读全文
摘要:准备的资料 把配置,配置到我们的Zuul的模块Application.yml 再设置超时时间 故意设置10毫秒,就是为了给大家看超时时间。 重启zuul服务,通过网管访问filmapi也就是film服务, 报错,超时的错误, 这就表示,我们这次的命令发出是由HystrixCommand进行包裹的,因
阅读全文
摘要:Zuul是典型的servlet+filter的形式。好处是大家对这个模型很熟悉,第二阻塞式线程是对程序最容易控制的线程。对技术员的技术,技术的考验都会差一些,而我们更聚焦于网关的实现。所以zuul业务形态,是非常成熟的业务形态。就是因为它们把所有的内容都聚焦到网关实现上。 缺点:阻塞式线程占用资源非
阅读全文
摘要:把关键字复制到IDEA搜索找到对应的类 可以看到它集成了ZuulFilter 它的类型是pre表示前置,他的filterOrder是-3就表示它的级别很高。 shouldFulter:默认启动。 run方法也是比较简单。就是帮我们设置了isDispatchServletRequest这样一个属性,
阅读全文
摘要:实现ZuulFilter 连有一些默认实现的方法 这是Filter的类型,比如这里我们类型为pre就是前置 越大执行顺序就会靠后 启用拦截,我们设置为true 具体的业务逻辑 获取当前的Context,它是线程安全的 我们可以把它理解为ThreadLocal 它可以获取Request和Respons
阅读全文
摘要:蓝色和粉色是它的后台实现,几乎可以忽略不计,这是它的底层实现。 所以对于我们来说重要的是这一部分 Zuul Servlet会截断我们所有的http请求。 第二步是ZuulFilter Runner。Zuul的核心其实是Filter,Zuul几乎没有任何可供你们实现的表现层、逻辑层、业务层等,几乎很少
阅读全文
摘要:*和**的区别就是,**可以支持多级目录。 例如后面加个问号,它只能匹配单个字符 因为问号只能匹配一个字符。 那么我们改成* 那么我们配置的时候为什么配置的是**呢?因为后面代表了多级目录。 *无法匹配多级目录。 在我们的接口里面有个filmId 我们现在配置的是*,取后面/filmId的就取不到
阅读全文
摘要:还可以用film-service去访问 http://localhost:8080/film-service/films zuul: routes: ## 路由规则 film-service: ## application.name -> 服务名称 path: /film-api/** ## 匹配规
阅读全文
摘要:首先加上日志的配置。复制logback.xml 复制log的配置 eureka的配置也复制过去。本身作为网关是需要对接后面的微服务的。所以它本身也要注册在注册中心里。 端口叫做8080, 引入zuul的依赖包 <dependency> <groupId>org.springframework.clo
阅读全文
摘要:创建工程遇到的错误 遇到问题不要慌,关机睡一觉就好了。第二天到公司换了个网络,在来创建项目又好了。可能是当晚住宿的宾馆网络太烂的缘故吧。 https://tinyperson.github.io/2018/03/26/%E9%81%87%E5%88%B0%E7%9A%84%E9%97%AE%E9%A
阅读全文
摘要:主要就是这一点,请求通过负载均衡访问网关,然后由网关对接后面所有的服务,也就是说对于负载均衡来说,后面的服务都是透明的,它只需要面试API Gateway,然后由于Gateway来统一管理后面的服务请求。 结束
阅读全文
摘要:基础 用的最多的是SpringMvc的Contract feign的属性 结束
阅读全文
摘要:在这里直接做就可以了 首先引入接口 复制一下原来的方法 先做非空的判断 解析返回的值。相当于把复杂的微服务调用变成了单体调用一样。 启动服务测试 启动eurekaServer 、film、hall三个服务。 http://localhost:8501/halls/hall:add { "cinema
阅读全文
摘要:首先把Feign的依赖加上 上面两个已经是公用的,我们只需要复制下面的两个即可 引入Utils模块。我们之前在common模块引入的,这里复制一下即可 开始实现 由于这里是公共的模块引用,所以可以有film可以有cinema这些模块的对应的包,只要你服务和服务之间需要调用的通过Feign,都可以放在
阅读全文
摘要:hall服务使用restTemplate调用film服务。 我们现在需要定义额外的接口,这个接口要实现FeignClient,通过这种新式来调用哦我们的filmController 创建额外的模块 复制下groupId 各项配置 父工程里面 删掉几个不必要的配置 test直接删除 applicati
阅读全文
摘要:Fign继承的特性。继承解决的问题,我们开发了一个服务,这个服务不是提供一次性的工作,它的目标是降低多次性的工作,比如说我今天有个订单的服务,这个服务要争对用户、物流、商城等等一系列,都可以调用我这个服务,可以解决你在订单方面的问题。这微服务诞生之初希望解决的问题。希望把业务尽可能的单一化、精细化、
阅读全文
摘要:微服务化后,服务和服务之间的调用的数据压缩。 配置项 第二步是压缩的格式 第三步,最小的请求限制 响应的配置。 # 解压缩 compression: request: enabled: true mime-types: text/xml,application/xml,application/jso
阅读全文
摘要:准备好的依赖包 <dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-httpclient</artifactId></dependency> 添加配置 httpclient: enabled: true 这是底层
阅读全文
摘要:首先开启Hystrix的支持 feign的配置,IDEA里面默认给了我们很多的配置可以去选,输入feign就会有很多的提示。 这样就相当于把feign和hystrix整合开启了。开启后就可以使用Hystrix的特性了。 创建一个API的实现类 加上@Service放在Spring 容器里进行管理 这
阅读全文
摘要:Ribbon整合 先把configuration注掉 把原来注释的方法恢复注释,invokerProviderController方法 我们原来是通过url的形式访问的 把URL也注掉,这样就变成了一个没有访问目标的 重启consumer服务,肯定是无法访问的 http://localhost:72
阅读全文
摘要:做局部性的自定义configuration feign提供给我们的可配置的东西 这是决定我们为什么之前可以使用SpringMVC来服务调用的原因。因为feign默认提供给我们的就是SpringMvcContract. 这里我们来演示如果我们不用SpringMvc的Contract那么具体怎么去操作?
阅读全文
摘要:primary默认就是true。这个就是优先级 FeignClient会根据注解的配置生成一个接口的实现类,Mybatis也是这样。 但是还是要去做这个接口的实现,在讲fallBack降级的时候会讲到。那么做了接口的实现就出现一个问题,我们实现了这个接口后,它自己本身又会生成一个,这样Spring就
阅读全文
摘要:这里也把s去掉 我们的路径这里都是Provider 上面使用path参数,这样下面就不需要写provider了 重启provider和consumer服务。正常运行说明我们的Path属性生效了。 http://localhost:7201/sayhello/post?author=jiangzh&p
阅读全文
摘要:启动这三个服务 http://localhost:7201/sayhello/post?author=jiangzh&providerId=001&username=jiangzh&password=1 consumer的打印信息 注意事项 首先是不支持@GetMapping @POSTMappin
阅读全文
摘要:下面就来看下这几个参数大致的用法 首先修改下provider里面的内容。复制一个新的方法叫做postTest 再加一个header的autor 这里改成post 调用方 创建一个对象, controller内.新建一个方法叫做sayHelloPost的方法 结束
阅读全文
摘要:演示之前把三个服务都起来了。 http://localhost:7201/sayhello/feign?message=abc 不支持的@GetMapping和@POSTMapping 疑问 结束
阅读全文
摘要:1.pom依赖 2.直接 3.配置 consumer去调用我们的provider 依赖的包,后续会演示openfeign和ribbon的整合。ribbon的在eureka-client包下 原来我们自带了这三个了,所以只需要引入openfeign即可 在consumer的pom上加上openfeig
阅读全文
摘要:没有什么和Feign媲美的。 记住Feign就是一个Http的Client 结束
阅读全文
摘要:回顾,这个图是面试的时候必考的内容。 Hystris和每个人是息息相关的,不管你是架构设计,不管是一线开发,不管你是学习的状态。Hystris都是要求大家必知必会的内容。 无论怎么封装HystrisCommand还是怎么写FallBack,还是怎么设置线程池,还是怎么限制超时,这些东西都和你的业务息
阅读全文
摘要:Hystrix最重要的一个点。 线程池具体怎么设置不知道?里面的数量是怎么来的。和对于我们来说是一个非常大的困惑。 Hystrix的线程池在工作中设置的时候,有哪些技巧? 首先在我们业务系统中,有个很重要的指标就是QPS,更精确的说,他其实分三大类,包括RPS、TPS、QPS这三个分别是什么呢?一个
阅读全文
摘要:之前我们引入过dashboard 配置项,暴露正常可以访问的安全的端口, 启动类,之前加的dashBoard的注解 如果想用集群监控就必须继承Turbine。Hystrix的监控弊端比较大,所以一般来讲,微服务里面,我们绝大多数不会用Hystrix去做监控,实在是很麻烦的一件事情。 所以这给大家演示
阅读全文
摘要:首先启动eurekaServer和Cinema这两个服务。 postMan做测试 访问的就是我们这个方法 加一个noePage的参数 也就是说明我们的请求降级就触发了。 我们的场景下我们所有的异常都是CommonServiceException。但是我们说过Hystrix只处理一种请求,Hystri
阅读全文
摘要:Hystrix其实需要下面标红线的一个依赖就够了 因为后面我们还会讲其他的东西,所以把下面两个也一块加上依赖了 这是我们单独使用Hystrix的演示。 将来后续会在film和hall两个模块做整合演示。所以暂时就没在film和hall里面加依赖。 添加配置,在演示dashbord的时候会用到的 开启
阅读全文
摘要:Hytrix在我们的表现层之外,再包装一层Command,也就是表现层在调其它层业务逻辑的时候,他就会把HystrixCommand再封装一层,根据你的隔离级别,再访问其他的业务情况,然后紧接着处理,处理后再返回,这是我们第一种场景。也就是HystrixCommand是写在表现层中的 另外一种场景,
阅读全文
摘要:添加熔断演示的方法 增加两个CommandDemo,一个用来演示正确的,一个从来演示错误的。那么怎么样才能让下面的代码变成错误的呢? 在CommandDemo里面演示,只要name是jiangzh开头的那么就故意写个除以0的错误代码 测试方法,一次成功了,一次失败 错误代码之后,再来执行一次成功的测
阅读全文
摘要:快照时间窗:一个时间段, 请求总数阀值:在上面那一段时间内,有多少请求总数。 错误百分比阀值:在有限的快照时间窗内,当我们达到请求总数阀值的数值,同时它的错误内容达到了一定比例,这个时候就要触发我们的熔断开关。 它把每一段时间叫做一个bucket.里面记录成功次数、失败次数、超时次数、重发的次数 在
阅读全文
摘要:演示FailBack,只需要在这里覆盖一个方法就可以了。 这样我们的FailBack就算是写完了。 触发降级 运行这个测试方法 t4和t5正常执行。前面三个触发了FailBack failBack和Run方法是一一对应的 降级的处理 至于这个HystrixBadRequestException会被抛
阅读全文
摘要:开启信号量 run方法内启动CommandDemo 复制一下这个方法 改个测试名字 清空方法内容 创建5个线程 因为主线程不能退出的比子线程快,如果比子线程快的话,这里将变得很麻烦 所以这里需要休眠 测试 信号量参数的设置 信号量的最大请求数 失败的时候最大请求数 再来运行测试 是有两条成功的消息的
阅读全文
摘要:下面我们就来看几个核心参数。下面三个标红的 设置为2,后面好演示。 复制一下我们之前的代码 复制到最下面改名字:threadTest 分别都是创建5个 切换到线程隔离 现在我们线程里面有2个线程,但是要执行5个。报错的应该是线程池内容不够这种错误。 运行测试方法 线程池的最大数量设置为5 这么设置完
阅读全文
摘要:执行原来这个单次执行的效果 这里打印了currentThread 线程名称就是我们之前这里定义的。首先第一点,我们这里执行的线程池名称是生效的,打印出来的是MyThreadPool -1 就是在我们的线程池MyThreadPool 里面的第一个线程。 修改线程模式。改成信号量的模式。 再来测试 输出
阅读全文
摘要:线程隔离这块,一定会有线程池,有线程池,我们一般会给他启用一个唯一标识。然后用来对于线程池进行一些相关的操作。就像我们有孩子,我们给他起名字张三、二狗,紧接着呢我想去召唤他什么的,我就用这个名字就可以了。这就是ThreadPoolKey的意思。 ThreadPoolKey不是必填项。Hytrix在你
阅读全文
摘要:单独建测试类 上下文做开启 构建请求,请求合并肯定就是多个请求。 这里先加上传参 这样就构建四个请求,这都是有讲究的 请求合并这里我们使用队列 创建了四个队列。 获取四个结果都打印出来。 测试。看效果。再来解释里面的内容。 上面的currentThread只打印了两回。 run方法里面的代码 应该是
阅读全文
摘要:首先创建一个请求合并处理的对象 三个参数,参数1:批量返回的结果, 参数2:批量里面每一次处理请求返回的结果, 参数3:批量里面每次处理的请求内容 批量处理返回的结果肯定是一个集合 这个三个方法的作用 批量结果和你的业务请求关联起来,它才知道哪个结果是哪个业务产生的内容。 定义属性,把这个结果返回回
阅读全文
摘要:请求 合并是Hytrix给我提供的一个特性。讲多个请求合并成一个请求,统一进行一次发送,解答的减少 网络消耗。 两次请求必须足够的近才能合并请求,默认是500毫秒左右。 结束
阅读全文
摘要:在commandTest上演示 这里本身有有一句打印 复制这个方法 多次请求有个开关 。 分别创建三个CommandDemo对象,请求三次,输出三次 运行测试 在commandDemo内重写getCacheKey 我们在请求的时候传了一个name,那么我就认为请求的同一个name,就认为内容是ok的
阅读全文
摘要:分为两种, 给我们提供的方法getCaheKey用来取出我们的缓存,,也就是重写getCaheKey这个方法后,我们就可以自定义的去判断,什么样的要触发缓存,什么样的不触发缓存。 只有在同一个请求上下文内才能够触发缓存 请求缓存有个开关可以去开启 结束
阅读全文
摘要:配置GroupKey 例如同一个请求多次,可能需要统计和监控。所以我们需要做一个手工分组,这个分组指的就是groupKey,指定同一个groupKey那就是同一个分组。 后续我们会学到线程池,groupKey它也是默认线程池的名称。 指定commandKey 结束
阅读全文
摘要:再来演示ObservableCommand 这里是个主线程的执行。 当然我们也可以值Command以主线程执行,ObservableCommand以不同线程执行,但是他俩最根本的区别主要在这。 一个执行一次命令,一个可以执行多次命令,当然这也是他们的区别之一。 到这,我们的两种命令模式就说完了。 这
阅读全文
摘要:创建类继承HystrixObservableCommand泛型是String 重写里面方法。 返回的类型就是 Observable,返回的就是它 初始化name属性和构造方法 这是哦我们讲隔离的时候,会用到的东西,为了减少那时候的代码量,所以这里提前做个预留, 那么我们返回呢?要返回Observab
阅读全文
摘要:最主要的区别体现在,Subcriber。在onNext里面可以集成我们正式的一些业务逻辑。也就是在Run方法之外,我们还有业务逻辑可以执行,这是他们之间最主要的一个区别。 热处理:在处理的过程中,加载了什么东西 冷处理:在执行之前,我就要加载完。然后依次执行。 区别在与1、2的执行顺序问题 我们常用
阅读全文