首页
学习
活动
专区
圈层
工具
发布

(三)Spring Cloud分布式之初识熔断机制(hystrix)

根据前两篇文章搭建的项目继续

传送门一((一)Spring Cloud分布式之初识Eureka——注册中心):https://cloud.tencent.com/developer/article/1449744

传送门二((二)Spring Cloud分布式之使用Eureka和Feign实现项目间简单的远程调用):https://cloud.tencent.com/developer/article/1449945

熔断机制(hystrix)

1. teacherdemo项目中新增loginHystrix方法

TeacherService中新增loginHystrix方法,当id等于101并且password等于abc的时候返回true,说明登录成功。

代码语言:txt
复制
@RequestMapping(value="/loginHystrix", method = RequestMethod.POST)
public boolean loginHystrix(@RequestParam("id")int id, @RequestParam("password")String password){
    if (id==101&&password.equals("abc")){
        return true;
    }else{
        return false;
    }
}

2. 修改receptiondemo项目

2.1 修改配置文件,开启熔断机制

代码语言:txt
复制
#开启熔断机制
feign.hystrix.enabled=true

2.2 修改TeacherService接口

  1. TeacherService接口中添加loginHystrix方法
代码语言:txt
复制
@RequestMapping(value="/loginHystrix", method = RequestMethod.POST)
public boolean loginHystrix(@RequestParam("id")int id, @RequestParam("password")String password);
  1. service包下创建hystrix包,创建TeacherServiceImpl类,用来实现熔断处理。
  2. @FeignClient注解中添加fallback属性,值为处理该接口熔断处理的实现类
代码语言:txt
复制
@FeignClient(name = "TEACHER", fallback = TeacherServiceImpl.class)

2.3 TeacherServiceImpl类中添加熔断处理方法

  1. TeacherServiceImpl类实现TeacherService接口
  2. 添加@Component注解
  3. 重写方法
代码语言:txt
复制
@Override
    public boolean loginHystrix(int id, String password) {
        System.out.println("熔断处理,找不到该方法!");
        return false;
    }

3. 运行,测试熔断处理

3.1开启项目

分别开启注册中心(centerdemo项目),消费者(receptiondemo项目),提供者(teacherdemo项目)。开启后浏览器输入下图地址,查看注册中心状态。

3.2测试熔断处理

地址栏先输入正确参数:id为101,password为abc

可以看到页面输出“登录成功”。

再关闭teacherdemo项目,重新刷新页面。

页面输出“登录成功”。再看看receptiondemo项目的控制台。

控制台输出“熔断处理,找不到该方法!”,熔断处理测试成功。

备注:上图receptiondemo项目中之所以会有CounselorService接口和CounselorServiceImpl类,是因为笔者给counselordemo也实现了熔断处理。感兴趣的朋友可以自己实现。

CounselorService代码如下

代码语言:txt
复制
package com.eurekademo.receptiondemo.service;

import com.eurekademo.receptiondemo.service.hystrix.CounselorServiceImpl;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@FeignClient(name = "COUNSELOR", fallback = CounselorServiceImpl.class)
public interface CounselorService {
    @RequestMapping(value = "/askCounselor", method = RequestMethod.POST)
    public String askCounselor();
}

CounselorServiceImpl代码如下

代码语言:txt
复制
package com.eurekademo.receptiondemo.service.hystrix;

import com.eurekademo.receptiondemo.service.CounselorService;
import org.springframework.stereotype.Component;

@Component
public class CounselorServiceImpl implements CounselorService {

    @Override
    public String askCounselor() {
        return "找不到班主任!去找老师去吧~~~";
    }
}
下一篇
举报
领券