现在为止所进行的所有的 Rest 服务调用实际上都会出现一个非常尴尬的局面,例如:以如下代码为例:Dept dept = this.restTemplate.exchange(DEPT_GET_URL + id, HttpMethod.GET,new HttpEntity<Object>(this.headers), Dept.class).getBody();所有的数据的调用和转换都必须由用户自己来完成,而我们本身不擅长这些,我们习惯的编程模式是:通过接口来实现业务的操作,而不是通过具体的 Rest 数据。
2.1、Feign 基本使用为了方便起见现在将“microcloud-consumer-80”模块复制为了“microcloud-consumer-feign”模块。1、 【microcloud-consumer-feign】为了可以使用到 feign 支持,需要修改 pom.xml 配置文件,引入相关依赖包:<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-feign</artifactId></dependency>feign 包含了 Ribbon 支持,所以导入了以上的依赖包之后就表示项目之中已经存在有了 ribbon 相关支持库。
2、 【microcloud-service】建立一个新的模块,这个模块专门负责客户端接口的定义;
3、 【microcloud-service】修改 pom.xml 配置文件,引用“microcloud-api”模块,这样就可以使用到 VO 类了;
4、 【microcloud-service】此时如果要通过 Feign 进行远程 Rest 调用,那么必须要考虑服务的认证问题。· 此时可以删除原始的 RestConfig 进行的配置处理,然后添加feign的认证配置类package cn.study.commons.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import feign.auth.BasicAuthRequestInterceptor;@Configuration
public class FeignClientConfig {@Beanpublic BasicAuthRequestInterceptor getBasicAuthRequestInterceptor() {return new BasicAuthRequestInterceptor("studyjava", "hello");}
}
5、 【microcloud-service】建立一个 IDeptClientService 接口;package cn.study.service;import java.util.List;import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;import cn.study.commons.config.FeignClientConfig;
import cn.study.vo.Dept;@FeignClient(value="MICROCLOUD-PROVIDER-DEPT",configuration=FeignClientConfig.class)
public interface IDeptClientService {@RequestMapping(method=RequestMethod.GET,value="/dept/get/{id}")public Dept get(@PathVariable("id") long id) ;@RequestMapping(method=RequestMethod.GET,value="/dept/list")public List<Dept> list() ;@RequestMapping(method=RequestMethod.POST,value="/dept/add")public boolean add(Dept dept) ;
}
6、 【microcloud-consumer-feign】修改 pom.xml 配置文件,引入 microcloud-service 开发包:<dependency><groupId>microcloud-service</groupId><artifactId>microcloud-service</artifactId><version>0.0.1-SNAPSHOT</version></dependency>
7、 【microcloud-consumer-feign】修改 ConsumerDeptController 控制器程序类;package cn.study.microcloud.controller;import javax.annotation.Resource;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import cn.study.service.IDeptClientService;
import cn.study.vo.Dept;@RestController
public class ConsumerDeptController {@Resourceprivate IDeptClientService deptService ;@RequestMapping(value = "/consumer/dept/get")public Object getDept(long id) {return this.deptService.get(id);}@RequestMapping(value = "/consumer/dept/list")public Object listDept() {return this.deptService.list();}@RequestMapping(value = "/consumer/dept/add")public Object addDept(Dept dept) throws Exception {return this.deptService.add(dept);}
}
8、 【microcloud-consumer-feign】修改程序启动主类,追加操作处理。package cn.study.microcloud;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients(basePackages={"cn.study.service"})
//进行接口IDeptClientService的扫描生成使得可以注入到ConsumerDeptController里面
public class Feign_Consumer_80_StartSpringCloudApplication {public static void main(String[] args) {SpringApplication.run(Feign_Consumer_80_StartSpringCloudApplication.class,args);}
}
2.2、Feign 相关配置1、 【microcloud-consumer-feign】Feign 之中最为核心的作用就是将 Rest 服务的信息转换为接口,
但是在实际的使用之中也需要考虑到一些配置情况,例如:数据压缩,Rest 的核心本质在于:JSON 数据
传输(XML、文本),于是就必须思考一种情况,如果用户发送的数据很大,这个时候可以考虑
修改 application.properties 配置文件对传输数据进行压缩;feign.compression.request.mime-types=text/xml,application/xml,application/json
feign.compression.request.min-request-size=2048
2、 如果有需要则可以在项目之中开启 feign 的相关日志信息(默认不开启):· 【microcloud-consumer-feign】修改 application.properties 配置文件,追加日志追踪:logging.level.root=DEBUG
· 【microcloud-service】修改 FeignClientConfig,开启日志的输出:package cn.study.commons.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import feign.Logger;
import feign.auth.BasicAuthRequestInterceptor;@Configuration
public class FeignClientConfig {@Beanpublic Logger.Level getFeignLoggerLevel() {return feign.Logger.Level.FULL ;}@Beanpublic BasicAuthRequestInterceptor getBasicAuthRequestInterceptor() {return new BasicAuthRequestInterceptor("studyjava", "hello");}
}
再次运行程序现在可以观察到如下的流程:· 当使用 Feign 要通过接口的方法访问 Rest 服务的时候会根据设置的服务类型发出请求,这个请求是发送给 Eureka(地址: “http://MICROCLOUD-PROVIDER-DEPT/dept/list”);· 随后由于配置了授权处理,所以继续发送授权信息(“Authorization”);· 在进行服务调用的时候 Feign 融合了 Ribbon 技术,所以也支持有负载均衡的处理;总结:Feign = RestTempate + HttpHeader + Ribbon + Eureka 综合体 = 业务接口的自动实例化

SpringCloud:Feign接口转换调用服务(Feign 基本使用、Feign 相关配置)相关推荐

  1. 白话SpringCloud | 第三章:服务注册与发现-高可用配置(Eureka)-下

    2019独角兽企业重金招聘Python工程师标准>>> 前言 上一章节,讲解了在单机模式下的服务注册与发现的相关知识点及简单示例.而在实际生产或者在这种微服务架构的分布式环境中,需要 ...

  2. 【学习笔记】Eureka服务治理代码实例、相关配置和原理机制详解

    文章目录 代码示例 启动一个服务注册中心 注册服务提供者 高可用注册中心 服务的发现与消费 Eureka的一些配置 服务注册类配置 服务实例类配置 实例名配置 端点配置 Eureka服务治理基础架构原 ...

  3. mysql 的字符集、比较规则和服务端、客户端的相关配置

    字符集 比较规则 命名含义 服务端设置 服务器级别 数据库级别 表级别 列级别 客户端通信设置 字符集转换 相关配置 服务端和客户端通信过程中的编解码 使用 show charset [like .. ...

  4. 反射feign接口,调用feign的方法

    主要是使用了spring的一个反射工具类ReflectionUtils 废话不多说,直接上代码 Fegin接口如下 @FeignClient("sys-service") publ ...

  5. 跟着狂神学SpringCloud(Rest环境搭建+Eureka服务注册与发现+ribbon+Feign负载均衡+Hystrix+服务熔断+Zuul路由网关+SpringCloud config分布)

    跟着狂神学SpringCloud SpringCloud 回顾之前的知识- JavaSE 数据库 前端 Servlet Http Mybatis Spring SpringMVC SpringBoot ...

  6. 通过依赖注入feign接口启动项目时报Error creating bean with name ‘xxxcontroller‘错误

    在我做springcloud微服务项目时,服务通过依赖注入feign接口,调用其它的服务,但是启动的时候报了以下错误. 原因就是feign接口方法的形参列表中,需要在参数前边加上@RequestPar ...

  7. Feign的远程调用nacos配置中心

    Feign的远程服务调用 1.添加注解使服务可以被发现 <dependency><groupId>org.springframework.cloud</groupId&g ...

  8. SpringCloud工程搭建之Eureka服务搭建(必选)

    3.1 创建Eureka子工程 完整工程源码:https://gitee.com/forwardxiang/spring-cloud-demo.git 3.1.1 IDEA操作 鼠标选中父工程并且点击 ...

  9. springCloud - 第4篇 - 消费者调用服务 ( Feign )

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 一.新建 ribbon 工程: 1. file - new - module 2. spring I ...

最新文章

  1. MinkowskiEngine多GPU训练
  2. 如何使用VirtualBox与GNS3搭建思科设备实验环境
  3. python部署到hadoop上_python实现mapreduce(2)——在hadoop中执行
  4. mysql 执行计划 优化_执行计划
  5. 呼呗电销机器人_为什么企业销售电销都用电销外呼智能机器人
  6. 在 C++Builder 工程里调用 DLL 函数
  7. 95-10-180-启动-Mx4jLoader
  8. notepad++配置Zen Coding
  9. rsyslogd以及日志轮替logrotate的梳理
  10. android日历读取账号,android – Outlook – 读取另一个用户的日历
  11. 低版本 android 软件下载,纳米盒旧版本下载-纳米盒旧版下载4.1安卓版-西西软件下载...
  12. 渠道类:新APP上线都有哪些具体的推广方式可以学习(最新)
  13. 前端的IDE工具对比
  14. 【安信可首款4G模组CA-01直连阿里物联网平台③】一型一密认证方式连接
  15. 一文了解肠-器官轴,肠好身体好
  16. Win10 21H1发布后的首个更新上线 包含大量的修复内容
  17. pta 6-8 使用函数求Fibonacci数 (15 分)
  18. Ubuntu 的软件管理工具
  19. Swagger-ui.html页面简单的修改
  20. 计算机用的云电脑,怎么使用云电脑玩端游

热门文章

  1. android游戏开发框架libgdx的使用(二十四)—physics-body-editor配合Box2D加快开发
  2. 给选择模型的子模型添加COL
  3. 文件以附件形式下载的方法
  4. 【大话数据结构算法】冒泡排序
  5. Nginx安全说:一剑封喉
  6. 如何把视频压缩变小?视频压缩方法介绍
  7. Regex pattern in openresty
  8. git 本地分支与远程分支关联的一种方法
  9. 【项目管理】老板与客户意见冲突怎么办?
  10. Kubernetes监控之Heapster源码分析