Spring Cloud入门(四)Spring Cloud Netflix之Hystrix

前言

     本章讲解Spring Cloud的Netflix的第三个组件Hystrix

方法

1.概念

Hystrix也就是我们常说的熔断器,容错管理工具,旨在通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。在微服务架构中,每个服务结点相安无事的进行运作,一旦某个节点出现了问题,那么服务器将会立即抛出异常。如果在高并发的条件下,这样的后果不堪设想。所以我们推出Hystrix来解决这个问题。

Hystrix涉及到两个常用的概念:服务降级、服务熔断

服务降级:当一个服务因为异常或者该服务实例停止的时候,我们需要一个备用的服务方法来代替用户调用的真实远程方法,该方法包含一些必要的错误信息(低端的服务),由于相对正常服务的质量较差,因而习惯叫做服务降级。

服务熔断:当一个服务在一定的时间频率内不断的服务降级,那么我们认为该服务不可用。系统将会直接调用服务降级后的服务。直到我们原本的服务恢复正常为止。

2.Hystrix的服务提供端实现

1)修改提供端pom文件,加入必要的依赖

<!-- hystrix坐标  -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
  		<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

2)修改提供端启动类,加入@EnableHystrix注解允许使用Hystrix

package cn.edu.ccut;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;


@EnableEurekaClient
@EnableHystrix
@SpringBootApplication
public class EurekaProviderApp {

	public static void main(String[] args) {
		SpringApplication.run(EurekaProviderApp.class, args);
	}
	
}

3)修改服务代码

package cn.edu.ccut.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;

@RestController
public class ProviderController {
	
	@RequestMapping("/getStr")
	@HystrixCommand(fallbackMethod="getString_back")//表示出现异常即执行指定的方法
	public String getString(){
		System.out.println("===调用原来的服务1===");
		int a = 1/0;
		return "略略略";
	}
	//备用方法
	public String getString_back(){
		return "error";
	}
}

这样的话,一旦消费端调用该方法出现了异常,那么直接服务降级跳转至备用方法执行。

由于我在服务方法中故意写了一个异常的代码,所以访问该方法将会出现如下结果:

3.Hystrix的服务消费端实现

由于我们在服务端实现时,每次都需要为服务方法编写一个备用的方法,那么一旦服务方法很多,那么编码体验是糟糕的!

而且一旦该服务彻底的宕机,那么服务端实现断路将无从谈起!

基于此,我们采用服务消费端的实现。

1)修改消费端pom文件,加入必要的依赖

<!-- hystrix坐标  -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
  		<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

2)修改application.properties,允许在feign中使用hystrix

#enable hystrix
feign.hystrix.enabled=true

3)编写备用的服务类ProviderServiceFallBack ,该类编写如下所示。

package cn.edu.ccut.feign;

import org.springframework.stereotype.Component;

import feign.hystrix.FallbackFactory;

@Component
public class ProviderServiceFallBack implements FallbackFactory<ProviderService>{

	@Override
	public ProviderService create(Throwable arg0) {
		return new ProviderService() {
			
			@Override
			public String getString() {
				System.out.println("===调用备用的服务===");
				return "error";
			}
		};
	}
	
}

4)在服务接口位置的注解@FeignClient添加新的属性fallbackFactory指向我们的备用服务类

@FeignClient(value="eureka-provider",fallbackFactory=ProviderServiceFallBack.class)  //服务提供者服务名
public interface ProviderService {

	@RequestMapping("/getStr")
	public String getString();
}

这样,我们在该类中可以为所有的服务方法添加必要的降级处理。

一旦服务提供方的方法调用失败,那么就爱那个直接跳转执行服务降级之后的方法返回给用户!

那么访问该方法也会出现之前的页面效果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值