[TOCM]
[TOC]
源码地址:https://github.com/IsResultXaL/springcloud
通过上一节内容介绍与实践,我们已经搭建起微服务架构中的核心组件
服务注册中心
服务提供者
服务消费者
断路器Hystrix
Hystrix仪表板
Turbine集群监控
服务消费者Feign
SpringCloud(七):服务消费者Feign 中
###Spring Cloud Feign
Hystrix提供的服务降级是服务容错的重要功能,由于Spring Cloud Feign在定义服务客户端的时候与Spring Cloud Ribbon有很大的差别,HystrixCommand定义被封装了起来,以下内容讲解Spring Cloud Feign的降级处理。
改造feign-consumer
为ConsumerService接口编写一个实现类ConsumerServiceFallback package com.caogen.feignconsumer.service;
import com.caogen.feignconsumer.entity.User; import org.springframework.stereotype.Component; @Component public class ConsumerServiceFallback implements ConsumerService{ @Override public String hello() { return "error"; } @Override public String hello(String name) { return "error"; } @Override public User hello(String name, Integer age) { return new User("未知", 0); } @Override public String hello(User user) { return "error"; } }
ConsumerService接口改造 package com.caogen.feignconsumer.service;
import com.caogen.feignconsumer.entity.User; import org.springframework.cloud.netflix.feign.FeignClient; import org.springframework.web.bind.annotation.*; @FeignClient(name = "eureka-client", fallback = ConsumerServiceFallback.class) //通过@FeignClient注解指定服务名来绑定服务 public interface ConsumerService { @RequestMapping(value = "/hello", method = {RequestMethod.GET}) //绑定REAT接口 String hello(); @RequestMapping(value = "/hello1", method = {RequestMethod.GET}) String hello(@RequestParam("name") String name); @RequestMapping(value = "/hello2", method = {RequestMethod.GET}) User hello(@RequestHeader("name") String name, @RequestHeader("age") Integer age); @RequestMapping(value = "/hello3", method = {RequestMethod.POST}) String hello(@RequestBody User user); }
通过@FeignClient注解的fallback属性来指定对应的服务降级实现类
启动以下应用
服务注册中心 eureka-server 端口 1111
服务消费实例 feign-consumer 端口 1115
通过发送GET请求到 http://localhost:1115/feign-consumer2 ,因为eureka-client服务没有启动,会直接触发服务降级。
application.yml配置文件里需要开启hystrix
#开启hystrix(要不然降级失败) feign: hystrix: enabled: true