##一、前言##
上节写了ribbon 整合hystrix的实例,本节准备实现feign,由于比较简单,只写关键代码,具体看github源码
##二、代码实现##
创建fallback包存放feign的fallback处理类,包结构如下:
UserFeignApi为入口调用类
package com.mayi.springcloud.api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import com.mayi.springcloud.client.UserFeignClient;
@RestController
public class UserFeignApi {
@Autowired
private UserFeignClient userFeignClient;
@GetMapping("/listUsersByFeign")
public String ListUsers(){
String users = this.userFeignClient.listUsers();
return users;
}
}
UserFeignClient为实现feign的接口
package com.mayi.springcloud.client;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import com.mayi.springcloud.fallback.UserFallback;
@FeignClient(name="service-user", fallback=UserFallback.class)
public interface UserFeignClient {
@GetMapping("/listUsers")
public String listUsers();
}
UserFallback为节点故障处理类
package com.mayi.springcloud.fallback;
import org.springframework.stereotype.Component;
import com.mayi.springcloud.client.UserFeignClient;
@Component
public class UserFallback implements UserFeignClient{
@Override
public String listUsers() {
// TODO Auto-generated method stub
return "服务调用失败";
}
}
配置中心的service-feign-hystrix-dev.yml
server:
port: 1001
feign:
hystrix:
enabled: true
##三、测试##
依次启动下图服务
访问http://localhost:1001/listUsersByFeign,交替出现
手动停止其中一个service-user服务,当负载均衡至该节点,会转到自定义的fallback类
若干秒后,该故障节点会被剔除,之后不会被其他调用者访问到。
源码地址:https://github.com/tianyana/springcloud/tree/master/bussnessservice-user-client-feign-hystrix