接口熔断 java_Feign Hystrix整合&服务熔断服务降级彻底解耦

Feign Hystrix整合&服务熔断服务降级彻底解耦

前面的代码,用@HystrixCommand fallbackMethod是很不好的,因为和业务代码耦合度太高,不利于维护,所以需要解耦,这我们讲下Feign Hystrix整合。

第一,microservice-student-provider-hystrix-1004项目修改

我们不用原先那套。按照正常的逻辑来写;

StudentService加新的接口方法:/**

* 获取信息

* @return

*/

public Map getInfo();

StudentServiceImpl写具体实现:@Override

public Map getInfo() {

Map map=new HashMap();

map.put("code", 200);

map.put("info", "业务数据xxxxx");

return map;

}

StudentProviderController正常调用service方法:/**

* 获取信息

* @return

* @throws InterruptedException

*/

@ResponseBody

@GetMapping(value="/getInfo")

public Map getInfo() throws InterruptedException{

Thread.sleep(900);

return studentService.getInfo();

}

第二步:microservice-common项目新建FallbackFactory类,解耦服务熔断服务降级

StudentClientService接口,新增getInfo方法;/**

* 获取信息

* @return

*/

@GetMapping(value="/student/getInfo")

public Map getInfo();

新建 StudentClientFallbackFactory 类,实现FallbackFactory接口;package com.java1234.service;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import org.springframework.stereotype.Component;

import com.java1234.entity.Student;

import feign.hystrix.FallbackFactory;

@Component

public class StudentClientFallbackFactory implements FallbackFactory{

@Override

public StudentClientService create(Throwable cause) {

// TODO Auto-generated method stub

return new StudentClientService() {

@Override

public boolean save(Student student) {

// TODO Auto-generated method stub

return false;

}

@Override

public List list() {

// TODO Auto-generated method stub

return null;

}

@Override

public Map getInfo() {

Map map=new HashMap();

map.put("code", 500);

map.put("info", "系统出错,稍后重试");

return map;

}

@Override

public Student get(Integer id) {

// TODO Auto-generated method stub

return null;

}

@Override

public boolean delete(Integer id) {

// TODO Auto-generated method stub

return false;

}

};

}

}

StudentClientService接口的@FeignClient注解加下 fallbackFactory属性

@FeignClient(value="MICROSERVICE-STUDENT",fallbackFactory=StudentClientFallbackFactory.class)

这类我们实现了 降级处理方法实现;

第三步:microservice-student-consumer-feign-80修改 支持Hystrix

StudentConsumerFeignController新增方法调用/**

* 根据id删除学生信息

* @return

*/

@GetMapping(value="/getInfo")

@ResponseBody

public Map getInfo(){

return studentClientService.getInfo();

}

application.yml加上hystrix支持

feign:

hystrix:

enabled: true

测试开启三个eureka,以及带hystrix的provider,和带feign,hystrix的consummer。

测试的话,也是没问题的。0.9秒的话,返回正常信息;超过1秒的话,就返回错误提示;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值