目录:

springcloud费话之Eureka基础

springcloud费话之Eureka集群

springcloud费话之Eureka服务访问(restTemplate)

springcloud费话之Eureka接口调用(feign)

springcloud费话之断路器(hystrix in feign)

springcloud费话之配置中心基础(SVN)

springcloud费话之配置中心客户端(SVN)

使用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.测试

后端并没有报错,前端返回了该熔断效果

最新文章

  1. 使用Gitblit 在windows 上部署你的Git Server
  2. dev winform导出功能
  3. CentOS7 安装 net-speeder 提升 VPS 网络性能
  4. Group Anagrams
  5. Android -- 自定义带进度条的按钮
  6. windows信息
  7. MySQL之扩展(触发器,存储过程等)
  8. 透明、圆角、阴影效果、背景色渐变、<a></a>去外层虚线、!!!表格标签<table>
  9. bootstrap 列表 表格 表单 复选 单选 多选 输入框组
  10. Spark 优化器 ML的论文
  11. 输出图片的php代码前面不能有空白行
  12. WCF HTTPS配置
  13. eNSP
  14. Python之简单工厂模式实现
  15. mac的svn之cornerstone简易教程
  16. nyoj137 取石子(三) 楼教主男人八题之一
  17. 【原创】运维基础之Redis(1)简介、安装、使用
  18. Day05 -寻找自己:Ruby的self物件与singleton method
  19. Python多线程、多进程实现
  20. Microsoft实现的IOC DI之 Unity 、Service Locator、MEF

热门文章

  1. python基础--6 集合
  2. thinkphp 响应对象response
  3. B/S上传整个文件夹
  4. UE4使用Dll
  5. 有道翻译爬取【json】
  6. http预请求 options
  7. Search Engine Hacking – Manual and Automation
  8. python 数字系列-无穷大与NaN
  9. yum python mysql
  10. 【CDN+】 Hive 入门 以及Handoop 系统认知