springcloud费话之断路器(hystrix in feign)
目录:
springcloud费话之Eureka服务访问(restTemplate)
springcloud费话之Eureka接口调用(feign)
springcloud费话之断路器(hystrix in feign)
使用eureka服务发现实现服务器之间的http访问(feign)并添加断路器hystrix
断路器,是springcloud中的一种熔断机制的实现方式
熔断机制,是达到了某个异常以后,后续判断不进行,直接否定的一种方式,类似于&&或者||的熔断的感觉
因为服务器之间的调用,判断错误链,以及出现问题以后的回调,时间可能会很长,如果不尽快阻止,
很可能导致很多请求都等待几十秒的超时而造成服务器阻塞,进而造成服务器崩溃
因此熔断机制十分重要
在springcloud的熔断机制,叫做Spring Cloud Circuit Breaker
具体使用的是hystrix断路器
具体使用方式和流程如下
1.依赖
在springcloud官方网站中找到断路器()的依赖,如下图,并导入pom
2.在启动类添加注解
在启动类添加注解@EnableHystrix,添加后代码如下:
package com.lyh.lyh_eureka_server; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
import org.springframework.cloud.openfeign.EnableFeignClients; @SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
@EnableHystrix
public class EurekaClientRun { public static void main(String[] args) {
SpringApplication.run(EurekaClientRun.class, args);
} }
3.在请求方法上添加熔断注解,并指定熔断的方法,具体代码如下:
熔断注解@HystrixCommand(fallbackMethod = "errorBreak"),其中的fallbackMethod为要调用的熔断的方法
package com.lyh.lyh_eureka_server.controller; import java.net.URI;
import java.net.URISyntaxException; import javax.annotation.Resource; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate; import com.lyh.lyh_eureka_server.Interface.FeignService;
import com.netflix.appinfo.InstanceInfo;
import com.netflix.discovery.EurekaClient;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.netflix.ribbon.proxy.annotation.Hystrix; @RestController
@EnableEurekaClient
public class TestController { @Autowired
private EurekaClient eurekaClient; @Resource
private FeignService feignService; @RequestMapping("/getServerInfo")
public Object getServerInfo() {
// 通过eurekaClient访问服务器获取某个命名的集群。
// getNextServerFromEureka的第一个参数是服务器名称,可重复
// 因为获得的是下一个,所以是负载均衡的
InstanceInfo nextServerFromEureka = eurekaClient.getNextServerFromEureka("eureka-client", false);
System.out.println("name:" + nextServerFromEureka.getAppName() + " port:" + nextServerFromEureka.getPort());
return nextServerFromEureka;
} // 触发的接口
@RequestMapping("/getInfoFromClient")
@HystrixCommand(fallbackMethod = "errorBreak")
public Object getInfoFromClient() throws URISyntaxException {
InstanceInfo nextServerFromEureka = eurekaClient.getNextServerFromEureka("eureka-client", false);
System.out.println("name:" + nextServerFromEureka.getAppName() + " port:" + nextServerFromEureka.getPort());
RestTemplate restTemplate = new RestTemplate();
String u = "http://" + nextServerFromEureka.getIPAddr() + ":" + nextServerFromEureka.getPort() + "/getInfo";
URI uri = new URI(u);
String obj = restTemplate.getForObject(uri, String.class);
System.out.println(obj.toString());
return obj;
} // 接口访问的服务 添加熔断方法errorBreak
@RequestMapping("/getInfo")
@HystrixCommand(fallbackMethod = "errorBreak")
public Object getInfo() {
return "I am info from client 9020";
} // 触发的接口 by feign 添加熔断方法errorBreak
@RequestMapping("/getInfoFromClientByFeign")
@HystrixCommand(fallbackMethod = "errorBreak")
public Object getInfoFromClientByFeign() throws Exception {
// 测试熔断效果
// System.out.println(1/0);
String obj = feignService.getInfo();
System.out.println(obj.toString());
return obj;
} //hystrix熔断调用的方法
public String errorBreak() {
return "this is error break by hystrix";
} }
4.测试
后端并没有报错,前端返回了该熔断效果
springcloud费话之断路器(hystrix in feign)的更多相关文章
- springcloud使用之断路器hystrix
上一篇文章提到我们最近开了个新项目,目的是将新的业务放到新项目中,老项目单独维护,再逐步迁移老项目到新项目里.但就在前端时间生产环境发生了一个事故,事故开始的异常是我们的业务发现前端h5页面办理很慢, ...
- 断路器Hystrix(Feign)
上一篇中我们讲了 断路器Hystrix(Ribbon) 本章讲解Feign+Hystrix已经Request请求传递,各种奇淫技巧…. - Hystrix Hystrix支持回退概念:当 断路器 打开 ...
- springcloud(九):熔断器Hystrix和Feign的应用案例
因为 feign 中已经支持了 Hystrix ,所以在 Feign 中使用 Hystrix 时,不需要导包,也不需要在入口类上面增加额外的注解: Feign 虽然支持了 Hystrix ,但是默认 ...
- springcloud(九):熔断器Hystrix和Feign的全套应用案例(二)
一.. 创建Eureka-Server 服务中心项目 1. 创建Eureka-Server 服务中心项目架构如下 2. pom.xml <dependencies> <depende ...
- 「 从0到1学习微服务SpringCloud 」13 断路器Hystrix
背景与功能 在微服务架构中,很多情况下,各个服务之间是相互依赖,一个服务可能会调用了好几个其他服务,假设其中有一个服务故障,便会产生级联故障,最终导致整个系统崩溃无法使用(这称为雪崩效应),Sprin ...
- springcloud费话之Eureka接口调用(feign)
目录: springcloud费话之Eureka基础 springcloud费话之Eureka集群 springcloud费话之Eureka服务访问(restTemplate) springcloud ...
- SpringCloud学习系列之三----- 断路器(Hystrix)和断路器监控(Dashboard)
前言 本篇主要介绍的是SpringCloud中的断路器(Hystrix)和断路器指标看板(Dashboard)的相关使用知识. SpringCloud Hystrix Hystrix 介绍 Netfl ...
- springcloud费话之配置中心server修改
目录: springcloud费话之Eureka基础 springcloud费话之Eureka集群 springcloud费话之Eureka服务访问(restTemplate) springcloud ...
- springcloud费话之配置中心客户端(SVN)
目录: springcloud费话之Eureka基础 springcloud费话之Eureka集群 springcloud费话之Eureka服务访问(restTemplate) springcloud ...
随机推荐
- 为什么有线宽带提供商获得ASN非常重要?
光纤和同轴电缆的组合(数据有线电视服务接口规范),由此产生的网络在世界引入了高速互联网接入.我们能够从网络运营中心向家庭用户提供10Mbps的下载速度. 拥有自己的自治系统编号(ASN)和IP块意味着 ...
- 029:url标签使用详解
url标签使用详解: 在模版中,我们经常要写一些 url ,比如某个 a 标签中需要定义 href 属性.当然如果通过硬编码的方式直接将这个 url 写死在里面也是可以的.但是这样对于以后项目维护可能 ...
- Java+Maven的工程运行Sonar的方式
step 1:在maven->setting.xml中进行配置 修改mvn工程所用的setting.xml文件,在<profiles></profiles>节点中增加: ...
- Intent.java分析
代码位于frameworks/base/core/java/anroid/Content/Intent.java Intent是对要进行操作的一种抽象描述.用action抽象操作,用data(andr ...
- django数据库迁移相关【sqlite3迁移到MySQL】(django2.0.3测试通过)
前言 项目部署到服务器之后,用的数据库还是sqlite3. 发现一些问题,sqlite3是小巧,但是服务器上查看数据库比较费劲,不能直观看到数据.可是我们经常需要即时.直观查看数据,这就用到MySQL ...
- K短路模板POJ 2449 Remmarguts' Date
Time Limit: 4000MS Memory Limit: 65536K Total Submissions:32863 Accepted: 8953 Description &qu ...
- Drawer实现侧边栏布局
在 Scaffold 组件里面传入 drawer 参数可以定义左侧边栏,传入 endDrawer 可以定义右侧边栏.侧边栏默认是隐藏的,我们可以通过手指滑动显示侧边栏,也可以通过点击按钮显示侧边栏. ...
- 计算一段日期内的周末天数的php代码(星期六,星期日总和)
代码如下: /*| Author: Yang Yu <niceses@gmail.com>| @param char|int $start_date 一个有效的日期格式,例如:200910 ...
- html、css、js分工,内核,html头,html表单
html:内容css:样式js:交互 内核 浏览器控制台输入navigator.userAgent,回车显示出内核"Mozilla/5.0 (Windows NT 6.1; WOW64) A ...
- Cookie由谁设置、怎么设置、有什么内容?
Cookie是由服务器生成,保存在客户端本地的一个文件,通过response响应头的set-Cookie字段进行设置,下面是一个示例: Cookie包含什么信息? 它可以记录你的用户ID.密码.浏览过 ...