• 技术文章 >Java >java教程

    spring cloud2.0学习笔记之Feign实战

    无忌哥哥无忌哥哥2018-07-20 12:02:45原创1966

    背景

    简介

    Feign是SpringCloud体系中声明式Rest客户端,通过简单配置、创建接口和注解即可实现Restful服务的调用。而且开始支持SpringMvc了。

    简单应用

    //入口类
    @SpringBootApplication
    @EnableFeignClientspublic class Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    
    }
    //原型接口声明
    @FeignClient("stores")public interface StoreClient {
        @RequestMapping(method = RequestMethod.GET, value = "/stores")
        List<Store> getStores();    
        @RequestMapping(method = RequestMethod.POST, value = "/stores/{storeId}", consumes = "application/json")
        Store update(@PathVariable("storeId") Long storeId, Store store);
    }

    开启Feign断路器和上下文支持

    # To disable Hystrix in Feignfeign:
      hystrix:
        enabled: true# To set thread isolation to SEMAPHORE# 将断路器隔离级别由默认的线程隔离调整为信号灯hystrix:
      command:    default:
          execution:
            isolation:
              strategy: SEMAPHORE

    断路器回调

    断路器支持回退,就是当断路器开启或接口出现错误时执行回调定义的方法,返回预先定义好的结果。 开启回调支持只需在@FeignClient注解中配置fallback参数为接口的回调实现类,并且回调实现类要被注解为Spring Bean(可以通过@Component,@Service等注解实现,详情见Spring4的注解文档)。

    @FeignClient(name = "hello", fallback = HystrixClientFallback.class)
    protected interface HystrixClient {
        @RequestMapping(method = RequestMethod.GET, value = "/hello")
        Hello iFailSometimes();
    }
    
    @Componentstatic class HystrixClientFallback implements HystrixClient {
        @Override    
        public Hello iFailSometimes() {        
            return new Hello("fallback");
        }
    }

    如果需要知道回退原因可以通过回退工厂来实现,代码实例如下:

    @FeignClient(name = "hello", fallbackFactory = HystrixClientFallbackFactory.class)
    protected interface HystrixClient {
        @RequestMapping(method = RequestMethod.GET, value = "/hello")
        Hello iFailSometimes();
    }
    
    @Componentstatic class HystrixClientFallbackFactory implements FallbackFactory<HystrixClient> {
        @Override    public HystrixClient create(Throwable cause) {        
            return new HystrixClient() {
                @Override            
                public Hello iFailSometimes() {                
                    return new Hello("fallback; reason was: " + cause.getMessage());
                }
            };
        }
    }

    Feign支持继承接口

    Feign支持接口继承的方式,将操作通过接口来形成契约。

    //生产者的控制层接口public interface UserService {
    
        @RequestMapping(method = RequestMethod.GET, value ="/users/{id}")
        User getUser(@PathVariable("id") long id);
    }
    //生产者的控制器实现
    @RestController
    public class UserResource implements UserService {}
    //消费端的Feign接口定义
    package project.user;
    @FeignClient("users")
    public interface UserClient extends UserService {}

    压缩支持

    开启压缩可以有效节约网络资源,但是会增加CPU压力,建议把最小压缩的文档大小适度调大一点

    //开启压缩
    feign.compression.request.enabled=true
    feign.compression.response.enabled=true
    
    //配置压缩文档类型及最小压缩的文档大小
    feign.compression.request.mime-types=text/xml,application/xml,application/json
    feign.compression.request.min-request-size=2048

    日志配置

    # 日志支持logging.level.project.user.UserClient: DEBUG
    @Configurationpublic class FooConfiguration {
        @Bean
        Logger.Level feignLoggerLevel() {        
            return Logger.Level.FULL;
        }
    }

    以上就是spring cloud2.0学习笔记之Feign实战的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    上一篇:这绝对是最详细的java多线程讲解 下一篇:java8下spark-streaming结合kafka编程(spark 2.0 & kafka 0.10
    大前端线上培训班

    相关文章推荐

    • 理解java8中java.util.function.*pojo反射新方法(附代码)• 浅析安卓app和微信授权登录及分享完整对接(代码分享)• 教你一招搞定时序数据库在Spring Boot中的使用• 一招教你使用java快速创建Map(代码分享)• PlayFramework 完整实现一个APP(十一)

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网