ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Spring Cloud Feign声明式服务调用

Spring Cloud Feign声明式服务调用 一、前言在上一篇文章《Spring Cloud Ribbon客户端负载均衡》中介绍了 Ribbon 使用负载均衡调用微服务但存在一个问题消费端每个请求方法中都需要拼接请求服务的 URL 地址存在硬编码问题且不符合面向对象编程思想。如果服务名称发生变化消费端也需要跟着修改。本篇文章将介绍 Feign 来解决上边的问题。二、简单介绍Feign 是一个声明式的 Web Service 客户端。使用 Feign 能让编写 Web Service 客户端更加简单同时支持与Eureka、Ribbon 组合使用以支持负载均衡。Spring Cloud 对 Feign 进行了封装使其支持了 Spring MVC 标准注解和 HttpMessageConverters。Feign 的使用方法是定义一个接口然后在其上边添加 FeignClient 注解。三、实战演练本次测试案例基于之前发表的文章中介绍的案例进行演示不清楚的读者请先转移至 《Spring Cloud Ribbon客户端负载均衡》进行浏览。3.1 添加依赖在 common-api 和 user-web 项目中添加依赖dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId/dependency3.2 定义接口在 common-api 中定义接口FeignClient(valueUSER-SERVER)publicinterfaceUserFeignService{RequestMapping(/provider/user/get/{id})publicUserget(PathVariable(id)Integerid);}使用 FeignClient 注解指定调用的微服务名称封装了调用 USER-SERVER 的过程作为消费方调用模板。3.3 修改服务消费方修改 user-web 控制层代码AutowiredprivateUserFeignServiceuserFeignService;RequestMapping(getFeign/{id})publicUsergetFeign(PathVariable(id)Integerid)throwsException{// 使用 Feign 封装的模板returnthis.userFeignService.get(id);}直接使用 Feign 封装模板调用服务方从而实现面向对象编程。3.4 启动 Feign 功能在启动类上添加 EnableEeignClients 注解EnableFeignClients(basePackages{com.wno704.cloud})EnableEurekaClientSpringBootApplicationpublicclassUserWebApplication{publicstaticvoidmain(String[]args){SpringApplication.run(UserWebApplication.class,args);}}打开浏览器访问 user-web 项目请求结果如下图四、Feign其他配置除了Ribbon和Hystrix配置之外Feign也有一些自个儿的配置。4.1 请求压缩Spring Cloud Feign支持对请求与响应进行GZIP压缩以减少通信过程中的性能损耗feign:compression:request:enabled:trueresponse:enabled:true同时我们还能对请求压缩做一些更细致的设置比如下面的配置内容指定了压缩的请求数据类型并设置了请求压缩的大小下限只有超过这个大小的请求才会对其进行压缩:feign:compression:request:enabled:truemime-types:text/xml,application/xml,application/jsonmin-request-size:2048response:enabled:true4.2 日志配置Feign提供了日志打印的功能Feign的日志级别分为四种NONE: 不记录任何信息。BASIC: 仅记录请求方法、URL以及响应状态码和执行时间。HEADERS: 除了记录BASIC级别的信息之外还会记录请求和响应的头信息。FULL: 记录所有请求与响应的明细包括头信息、请求体、元数据等。日志级别默认为NONE要改变级别需要定义一个日志配置BeanpublicclassFeignConfigurarion{BeanLogger.LevelfeignLoggerLevel(){returnLogger.Level.FULL;}}然后在yml中配置Feign客户端的日志级别为debugFeign日志记录仅响应debug级别logging:level:com:wno704:cloud:debug
返回列表