使用springCloud构建微服务——Hystrix实现容错及打印日志

一、前期准备

先创建一个注册中心,一个消费者服务,一个生产者服务,由于之前写过,这里不多写了,请参考前面的博文。

使用springCloud构建微服务实战

二、本篇主题

Hystrix是由Netflix开源的一个延迟和容错库,用于隔离访问远程系统,服务或者第三方库,防止级联失败,从而提高系统的可用性和容错性。spring Cloud默认为Feign整合了Hystrix,在下面的操作中,不需要引入依赖了,前面已经引入过了Feign,在上篇的基础上接着操作。

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

重点:Feign已经为我们集成了Hystrix,经过查证,原来feign集成hystrix需要配置开启,如果不开启,会报错,不会去回退页面的。

在配置文件application.properties中添加:

(1)因为不知道feign集成hystrix需要配置开启,我花费了三四个小时找bug,一直不能在服务失败后,回退页面并打印日志。

feign.hystrix.enabled=true

1、创建一个Feign接口SchedualServiceHi,并添加@FeignClient注解

(1)注解中的name值是我们调用的其他应用名。该应用名中必须有该类中地址的映射,否则会调用出错。

(2)fallbackFactory的值是调用出错时会去调用的方法。

@FeignClient(name= "myprovider",fallbackFactory = FeignClientFallbackFactory.class)
public interface SchedualServiceHi {

    @RequestMapping("/index")
    String aa();

    @RequestMapping("/bb")
    public boolean mmm(@RequestParam("name") String name, @RequestParam("pwd") String pwd);
}

2、调用出错的类如下,消费者在调用提供者的方法出错时会返回调用这个类对应的方法,同时打印日志。

(1)该类需要实现FallbackFactory接口,并重写方法。

(2)接口的泛型为上面的Feign接口SchedualServiceHi。

(3)声明了打印日志的print属性,日志放在各个fallback方法中,不要直接放在create方法中。

(4)类上添加@component注解。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Component
public class FeignClientFallbackFactory implements FallbackFactory<SchedualServiceHi> {
//    打印日志
    private static final Logger print= LoggerFactory.getLogger(FeignClientFallbackFactory.class);


    @Override
    public SchedualServiceHi create(Throwable throwable) {
        return new SchedualServiceHi() {
            @Override
            public String mm() {
                print.info("fallback; reason was:",throwable);
                return "服务报错了";
            }

        };
    }
}

三、测试结果

1、将注册中心,生产者,消费者运行,请求消费者的mindex地址,此时能够正确跳转。

2、当把provider关闭后,再次访问,页面会返回服务报错了,同时会打印错误原因日志如下:

(1)意思:客户服务异常,加载没有可用的myprovider服务,为客户端。

四、总结

以上,我们使用Hystrix实现了微服务的容错,同时发生回退时,打印出来错误日志。更多精彩欢迎关注:

猜你喜欢

转载自blog.csdn.net/jiankang66/article/details/90257189