前置知识

SpringCloud 是微服务解决框架,主要应用在RPC远程调用。
2、里面集成了Eureka注册中心、Ribbon负载均衡客户端、Zuul接口网关分布式配置中心。
3、SpringCloud客户端调用工具、rest、fegin。
4、SpringCloud断路器Hystrix服务降级、熔断机制、限流。

其实总结高并发就一句话:通过负载均衡达和反向代理达到分流、通过限流达到防服务雪崩、通过服务降级达到部分故障服务依旧可用、通过隔离达到当某些服务故障不影响到其他服务、通过设置超时时间与重试机制达到防止请求堆积

一、使用Fegin客户端调用工具

 pom.xml导入
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.leeue</groupId><artifactId>41_service-order-fegin</artifactId><version>0.0.1-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.2.RELEASE</version><relativePath /> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-ribbon</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-feign</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Dalston.RC1</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build><repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository></repositories></project>
MemberFegin.java    fegin调用service
package com.leeue.service;import java.util.List;import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;/*** @classDesc: 功能描述:(使用fegin来调用接口)* @author:<a href="leeue@foxmail.com">李月</a>* @Version:v1.0* @createTime:2018年11月11日 下午7:28:19*/
@FeignClient(value="service-member") // 这上面value值写你要调用的服务名称
public interface MemberFegin {@RequestMapping("/getMemberAll") // 这上面写你要调用的服务的接口地址 也就是service-member服务立马的Mappingpublic List<String> getToOrderMemberAll();//Fegin底层也是会发出HttpClient请求来进行调用service-member服务地址
}
OrderFeginController.java   控制层
package com.leeue.controller;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import com.leeue.service.MemberFegin;@RestController
public class OrderFeginController {@Autowiredprivate MemberFegin memberFegin;@RequestMapping("/getToOrderMemberAll")public List<String> getToOrderMemberAll(){System.out.println("order fegin 工程调用 member工程");return memberFegin.getToOrderMemberAll();}
}
application.yml文件
eureka:client:serviceUrl:defaultZone: http://localhost:8888/eureka/
server:port: 8765
spring:application:name: service-order-fegin
OrderFegin.java
package com.leeue;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients   // 使用Fegin来调用服务 要在启动类上加上这个注解
public class OrderFegin {public static void main(String[] args) {SpringApplication.run(OrderFegin.class, args);}
}
调用链接:http://localhost:8765/getToOrderMemberAll

要注意的是fegin里面是自带负载均衡的。路由策略是轮训机制

二、服务雪崩效应产生原因

什么是服务雪崩效应?
答:雪崩效应,所有的请求在处理一个服务,这个时候
就会产生服务堆积,就不能进行访问改服务的其他接口了。
解决方案:
1、使用超时机制、服务降级()服务降级:就是在服务调用接口的时候如果发生错误或者超时的情况下,就不让其调用接口,调用本地的fallback,返回服务错误,或者服务请求过多这种提示。

三、模拟服务雪崩效应操作使用Jmeter来模拟





四、解决雪崩效应的方法

服务雪崩产生原因:是因为服务产生了堆积,导致了该服务的其他接口无法被调用。
如何解决服务雪崩效应?
1、设置超时机制 --- 如果订单服务调用会员服务接口没有在 规定的时间响应回 来就返回给客户端说连接超时等消息2、使用服务降级:服务接口发生错误的时候,不去调用接口,调用本地方法。在SpringCloud 中是 fallback。本地方法。给客户端一个反馈结果:当前访问人数过多请稍后重试等消息。3、熔断机制:类似保险丝。--- 一旦达到了规定请求数量、就熔断报错  -- 服务降级类似4、使用服务的隔离机制 --- 每个服务接口都把隔离开来。A接口自己有独立的线程池、B接口线程池  在A接口有大量访问的时候不影响B接口的访问。5、服务的限流机制。使用网关zuul 或 nginx来做 接口达到一定次数的时候 就返回错误。

五、使用SpringCloud中Hystrix实现服务的降级

Hystrix 断路器:当我们使用rpc远程调用的时候,解决服务雪崩效应。
hystrix是专门解决服务与服务之间的报错信息。
hystrix:断路器,里面有服务降级、熔断机制、服务隔离。在使用hystrix项目中pom.xml文件加入
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
application.yml文件
# 开启hystrix 断路器
feign:hystrix:enabled: true
启动OrderFegin这个服务

 再次访问的时候就就没有转圈,而是直接抛出服务异常这种。在SpringCloud中默认服务之间调用服务要在1秒内返回结果。这里是要3秒才能返回结果,所以hystrix进行了服务的降级这里使用了服务降级。在application.yml设置超时时间。
###超时时间
hystrix:command: default: execution: isolation:thread: timeoutInMilliseconds: 4000
 超时时间在5-10秒之间解决代码:
package com.leeue.fallback;import java.util.ArrayList;
import java.util.List;import org.springframework.stereotype.Component;import com.leeue.service.MemberFegin;/*** @classDesc: 功能描述:(使用hystrix 断路器做的服务降级)* @author:<a href="leeue@foxmail.com">李月</a>* @Version:v1.0* @createTime:2018年11月14日 上午11:50:51*/
@Component //注入到Spring容器里面去
public class MemberFallBack implements MemberFegin{/*** 对 getToOrderMemberAll这个接口进行服务降级处理*/// 这个是讲课的例子  在公司里面 不是返回类型是 String的@Overridepublic List<String> getToOrderMemberAll() {//做服务的降级处理List<String> list = new ArrayList<String>();list.add("服务发生异常....当前不能访问");return list;}}
package com.leeue.service;import java.util.List;import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;import com.leeue.fallback.MemberFallBack;/*** @classDesc: 功能描述:(使用fegin来调用接口)* @author:<a href="leeue@foxmail.com">李月</a>* @Version:v1.0* @createTime:2018年11月11日 下午7:28:19*/
@FeignClient(value="service-member",fallback=MemberFallBack.class) // 这上面value值写你要调用的服务名称
public interface MemberFegin {@RequestMapping("/getMemberAll") // 这上面写你要调用的服务的接口地址 也就是service-member服务立马的Mappingpublic List<String> getToOrderMemberAll();//Fegin底层也是会发出HttpClient请求来进行调用service-member服务地址
}

六、使用hystrix解决服务雪崩效应

 上面是fegin  调用解决雪崩效应,使用的是服务降级

七、SpringCloud相关面试

1、微服务情况下,怎么解决服务雪崩效应。
答:使用hystrix、服务降级、服务隔离、使用网关限流
2、SpringCloud与SpringBoot区别
答:SpringBoot解决的问题是,能快速集成第三方框架,
简化xml配置,自带容器,默认集成web组件springMVC
SpringCloud微服务解决框架依赖与SpringBoot.
使用SpringMVC作为RPC调用框架书写接口。

有A服务 B服务 怎么让B 服务只能让A服务访问
解决方案:
在微服务里面使用接口网关 来判断接口请求来源是那个服务
底层原理是判断http请求来源

Java架构学习(四十一)SpringCloud基础回顾使用Fegin客户端调用服务雪崩效应产生原因Jmeter模拟服务雪崩效应解决雪崩效应办法Hystrix解决雪崩效应相关面试相关推荐

  1. Java架构学习(五十一)微信公众号开发混合开发技术流程微信推送原理外网映射工具使用微信公众号接口认证代码获取微信客户端信息解决微信消息幂等问题

    一.微信公众号项目 SOA架构:面向接口开发,也就是相当于把传统的那种ssh项目的业务逻辑层抽取出来 做成接口. SSH架构与分布式架构的区别 SSH架构是整个项目的任何模块都在一个项目里面 分布式架 ...

  2. [Python从零到壹] 四十一.图像处理基础篇之图像采样处理

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  3. C1认证学习四(多媒体基础参数)

    C1认证学习四(多媒体基础参数) 文章目录 C1认证学习四(多媒体基础参数) 任务学习 任务目标 参数的定义 比特率 采样率 采样位深 任务学习 所谓的多媒体指的是多种媒体的综合,一般都包含有图像.声 ...

  4. 微服务架构案例(05):SpringCloud 基础组件应用设计

    本文源码:GitHub·点这里 || GitEE·点这里 更新进度(共6节): 01:项目技术选型简介,架构图解说明 02:业务架构设计,系统分层管理 03:数据库选型,业务数据设计规划 04:中间件 ...

  5. Java开发学习必须了解的基础知识点

    面向对象和面向过程的区别 面向过程: 优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机.嵌入式开发.Linux/Unix等一般采用面向过程开发,性能是最重要的因素. ...

  6. Java多线程学习四十三:

    本课时我们主要讲解 final 的三种用法. final 的作用 final 是 Java 中的一个关键字,简而言之,final 的作用意味着"这是无法改变的".不过由于 fina ...

  7. Java并发编程(四):计算机基础-门电路与加法器

    一.门电路 用以实现基本逻辑运算和复合逻辑运算的单元电路称为门电路.上一部分我们已经知道了逻辑门电路的概念(逻辑运算.继电器和门电路),并且引出了一个基础的门电路:与门 事实上,常用的门电路有很多,除 ...

  8. Java后端学习路线,零基础这样学

    从事Java后端开发,其本质就是只对业务数据进行高效的加工处理,而不需要考虑如何把数据以什么更适合的形式(比如表格.图形.文字等),展现给使用该软件系统的用户,从而带给用户更好的软件使用体验感. 因此 ...

  9. Java多线程学习二十一:ConcurrentHashMap 在 Java7 和 8 有何不同

    在 Java 8 中,对于 ConcurrentHashMap 这个常用的工具类进行了很大的升级,对比之前 Java 7 版本在诸多方面都进行了调整和变化.不过,在 Java 7 中的 Segment ...

  10. Java多线程学习四:共有哪 3 类线程安全问题

    我们在实际开发中经常会遇到线程不安全的情况,那么一共有哪 3 种典型的线程安全问题呢? 运行结果错误: 发布和初始化导致线程安全问题: 活跃性问题. 运行结果错误 来看多线程同时操作一个变量导致的运行 ...

最新文章

  1. JFinal Nutz
  2. 卷积神经网络中的参数共享/权重复制
  3. 分布式消息通信ActiveMQ原理-持久化策略-笔记
  4. Active Diretory 全攻略(五)--规划和建立组
  5. 如何去掉文章里的非关键词c++_B2B/B2C网站:文章标题如何写才能促进搜索排名...
  6. 【转】ABP源码分析三十二:ABP.SignalR
  7. 抽象类与接口的区别与联系
  8. Flask-WTF CSRF 保护P3
  9. yagmail发送附件
  10. !peb和PEB结构
  11. Java开源框架集(全)
  12. php 转通达信数据格式,[转载]通达信数据接口及日线数据格式
  13. PDF转图片 Ghostscript.NET
  14. 09、Non-Black-Box ZK(Barak‘s protocol)--Alon Rosen
  15. 台湾大学林轩田机器学习技法课程学习笔记7 -- Blending and Bagging
  16. 如何修改网页视频播放倍速?(最高16倍速)
  17. 企业邮箱发信数量是多少?
  18. 【学术】进行一场“认真准备的学术汇报”
  19. 批量转账到支付宝ISV(API接口流程步骤)
  20. cocos2d-x 流星划过特效

热门文章

  1. BuildaFlightTrackerwithCesiumforUnreal_译
  2. No ‘Access-Control-Allow-Origin‘ header is present on the requested resource.跨域问题解决
  3. 润增长69.6%,新东方的中年危机过去了吗?
  4. 建筑暖通空调图纸符号_暖通空调的完整形式是什么?
  5. python对流进行join
  6. 恒星物联 雷达型窨井液位监测仪 液位传感器
  7. 「重新maven学习」Ⅰ了解maven以及使用
  8. CentOS7有线未托管,网络连接图标消失
  9. 分享23种追女生的方式,教你同时把追MM和设计模式融汇贯通(上)
  10. CentOS7环境部署kubenetes1,java开发基础形考作业题