Feign(服务调用):

前提条件:把互相调用的服务在Nacos进行注册;
1)引入相关依赖

<!--服务调用-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2)在调用端的启动类添加注解:@EnableFeignClients
3)创建包和接口:
创建client包
@FeignClient注解用于指定从哪个服务中调用功能 ,名称与被调用的服务名保持一致。
@GetMapping注解用于对被调用的微服务进行地址映射。
@PathVariable注解一定要指定参数名称,否则出错
@Component注解防止,在其他位置注入CodClient时idea报错

package com.guli.edu.client;@FeignClient("service-vod")
@Component
public interface VodClient {@DeleteMapping(value = "/eduvod/vod/video/{videoId}")public R removeVideo(@PathVariable("videoId") String videoId);
}

4)调用微服务:在调用端的VideoServiceImpl中调用client中的方法

@Override
public boolean removeVideoById(String id) {//查询云端视频idVideo video = baseMapper.selectById(id);String videoSourceId = video.getVideoSourceId();//删除视频资源if(!StringUtils.isEmpty(videoSourceId)){vodClient.removeVideo(videoSourceId);}Integer result = baseMapper.deleteById(id);return null != result && result > 0;
}

feign结合Hystrix使用:

1)在调用端添加依赖:

 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-ribbon</artifactId></dependency><!--hystrix依赖,主要是用  @HystrixCommand --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency><!--服务注册--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!--服务调用--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>

2)在调用端配置文件中添加hystrix配置

#开启熔断机制
feign.hystrix.enabled=true
#设置hystrix超时时间,默认1000ms
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=60

3)在调用端的client包里面创建熔断器的实现类:要么是调用服务的降级操作,要么简单的给个回应。

@Component
public class VodFileDegradeFeignClient implements VodClient {@Overridepublic R removeVideo(String videoId) {return R.error().message("time out");}@Overridepublic R removeVideoList(List videoIdList) {return R.error().message("time out");}
}

4)修改Client接口的注解

@FeignClient(name = "service-vod", **fallback =VodFileDegradeFeignClient.class**)
@Component
public interface VodClient {@DeleteMapping(value = "/eduvod/vod/{videoId}")public R removeVideo(@PathVariable("videoId") String videoId);@DeleteMapping(value = "/eduvod/vod/delete-batch")public R removeVideoList(@RequestParam("videoIdList") List videoIdList);
}

Hystrix:

Hystrix的设计原则包括:

资源隔离:例如三个模块拥有100线程,把线程按照一定数目进行分配,防止雪崩。

熔断器:熔断器开关由关闭到打开的状态转换是通过当前服务健康状况和设定阈值比较决定的.
1)当熔断器开关关闭时, 请求被允许通过熔断器. 如果当前健康状况高于设定阈值, 开关继续保持关闭. 如果当前健康状况低于设定阈值, 开关则切换为打开状态.
2)当熔断器开关打开时, 请求被禁止通过.
3)当熔断器开关处于打开状态, 经过一段时间后, 熔断器会自动进入半开状态, 这时熔断器只允许一个请求通过. 当该请求调用成功时, 熔断器恢复到关闭状态. 若该请求失败, 熔断器继续保持打开状态, 接下来的请求被禁止通过.

命令模式

Hystrix大概流程:
构建Hystrix的Command对象, 调用执行方法.
Hystrix检查当前服务的熔断器开关是否开启, 若开启, 则执行降级服务getFallback方法.
若熔断器开关关闭, 则Hystrix检查当前服务的线程池是否能接收新的请求, 若超过线程池已满, 则执行降级服务getFallback方法.
若线程池接受请求, 则Hystrix开始执行服务调用具体逻辑run方法.
若服务执行失败, 则执行降级服务getFallback方法, 并将执行结果上报Metrics更新服务健康状况.
若服务执行超时, 则执行降级服务getFallback方法, 并将执行结果上报Metrics更新服务健康状况.
若服务执行成功, 返回正常结果.
若服务降级方法getFallback执行成功, 则返回降级结果.
若服务降级方法getFallback执行失败, 则抛出异常.
fallback方法自己书写:可以是除去边边角角只保留核心服务的降级(最好是这个),也可以是简简单单的回应。

springcloud服务调用以及整合Hystrix相关推荐

  1. 微服务之SpringCloud服务调用

    SpringCloud调用服务有两种方式,一种是Ribbon+RestTemplate, 另外一种是Feign. Ribbon是一个基于HTTP和TCP客户端的负载均衡器,其实feign也使用了rib ...

  2. SpringCloud实战5-Feign声明式服务调用

    SpringCloud实战5-Feign声明式服务调用 在前面的文章中可以发现当我们通过RestTemplate调用其它服务的API时,所需要的参数须在请求的URL中进行拼接,如果参数少的话或许我们还 ...

  3. SpringCloud微服务-服务注册发现-负载均衡-服务调用-服务降级-服务网关-配置中心-消息总线-消息驱动-链路追踪-alibaba-nacos-sentinel-seata理论原理分析

    SpringCloud理论技术 概述 ​ Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.消息总 ...

  4. 【Springcloud】(06)中级搭建-OpenFeign服务调用

    [Springcloud](06)中级搭建-OpenFeign服务调用 [一]OpenFeign是什么 (1.1)Feign和OpenFeign (1.2)Feign能干什么? (1.3)Feign集 ...

  5. SpringCloud OpenFeign 远程HTTP服务调用用法与原理

    在 openFeign 未出现前,Spring 提供了 RestTemplate 作为远程服务调用的客户端,提供了多种便捷访问远程 Http 服务的方法,能够大大提高客户端的编写效率.由于文章内容会使 ...

  6. SpringCloud OpenFeign服务调用客户端介绍及配置使用

    一.OpenFeign介绍 OpenFeign是Netfix开发的一款声明式,模板化的Http服务调用客户端.使用在服务调用者工程端.OpenFeign的负载均衡也为客户端负载均衡.一下简称Feign ...

  7. Feign Hystrix微服务调用Session传播

      在使用SpringCloud来构建微服务时,服务和服务之间的调用非常频繁,服务之间调用通常用feign和Hystrix结合来使用,当使用上游微服务调用下游微服务时,怎么将上游服务的请求信息传递到下 ...

  8. SpringCloud(2)--服务调用

    SpringCloud 技术栈 服务注册与发现 EUREKA(停更),Zookeeper,Consul,Nocos 服务调用 RIBBON(NETFLIX网飞), LoadBalancer, FELG ...

  9. OpenFeign 整合 Hystrix 实现服务降级

    Hystrix 的默认超时时间 :1s OpenFeign底层是使用 ribbon实现的 默认连接超时时间 : 1s 修改连接超时时间配置(OpenFeign): #设置feign客户端超时时间 ri ...

最新文章

  1. eclipse: Program g++ not found in PATH
  2. 180508 - 解决有关VIVO的2018-04-01安全补丁导致的APP闪退问题
  3. weka: naive bayes
  4. Android学习----AndroidManifest.xml文件解析
  5. JAVA微信开发:[17]如何获取所有关注用户
  6. 最强阿里巴巴历年经典面试题汇总:C++研发岗
  7. Android实现按两次back键退出应用
  8. 婆媳关系不好首先就有一个斤斤计较的婆婆
  9. 如何写出让同事膜拜的漂亮代码?
  10. java interface 传值_前后端分离传值方案-RestfulAPI
  11. 华硕aura完全卸载_闲谈:记一次华硕电脑维修。
  12. 四位共阳极数码管显示函数_实验四 共阴数码管静态显示
  13. 从零开始学习鸿蒙系统
  14. (PKCS1) RSA 公私钥 pem 文件解析
  15. 亚马逊领导力准则14条
  16. 无利不起早:理性看待IBM倾“芯”中国
  17. 穷人与富人的距离0.05厘米
  18. Mysql- --DQl语句(select数据查询语言,多表查询,View试图)linux常用(重点)
  19. 搞清楚php-FPM到底是什么?
  20. 微信小程序的手机通讯录点击本页面跳转位置的代码详解

热门文章

  1. python根据TF-IDF使用sklearn(TfidfVectorizer)计算句子的embedding
  2. 解决pytorch softmax警告UserWarning: Implicit ....Change the call to include dim=X as an argument.
  3. linux(windows,mac)下安装ta-lib
  4. 混凝土墙开洞_失传已久的混凝土墙体加固“秘籍”
  5. c 语言从大到小排序算法,10 大经典排序算法(动图演示+ C 语言代码)
  6. 回声检测仿真信号matlab,杭州oracle培训入门
  7. Manifold learning-based methods for analyzing single-cell RNA-sequencing data
  8. 2016年百度面试题
  9. 乘法器之四( 乘加器(Sum of multiplication))
  10. Linux 2.6.39.1 Hello world 驱动总结