SpringCloud:Feign接口转换调用服务(Feign 基本使用、Feign 相关配置)
现在为止所进行的所有的 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 相关配置)相关推荐
- 白话SpringCloud | 第三章:服务注册与发现-高可用配置(Eureka)-下
2019独角兽企业重金招聘Python工程师标准>>> 前言 上一章节,讲解了在单机模式下的服务注册与发现的相关知识点及简单示例.而在实际生产或者在这种微服务架构的分布式环境中,需要 ...
- 【学习笔记】Eureka服务治理代码实例、相关配置和原理机制详解
文章目录 代码示例 启动一个服务注册中心 注册服务提供者 高可用注册中心 服务的发现与消费 Eureka的一些配置 服务注册类配置 服务实例类配置 实例名配置 端点配置 Eureka服务治理基础架构原 ...
- mysql 的字符集、比较规则和服务端、客户端的相关配置
字符集 比较规则 命名含义 服务端设置 服务器级别 数据库级别 表级别 列级别 客户端通信设置 字符集转换 相关配置 服务端和客户端通信过程中的编解码 使用 show charset [like .. ...
- 反射feign接口,调用feign的方法
主要是使用了spring的一个反射工具类ReflectionUtils 废话不多说,直接上代码 Fegin接口如下 @FeignClient("sys-service") publ ...
- 跟着狂神学SpringCloud(Rest环境搭建+Eureka服务注册与发现+ribbon+Feign负载均衡+Hystrix+服务熔断+Zuul路由网关+SpringCloud config分布)
跟着狂神学SpringCloud SpringCloud 回顾之前的知识- JavaSE 数据库 前端 Servlet Http Mybatis Spring SpringMVC SpringBoot ...
- 通过依赖注入feign接口启动项目时报Error creating bean with name ‘xxxcontroller‘错误
在我做springcloud微服务项目时,服务通过依赖注入feign接口,调用其它的服务,但是启动的时候报了以下错误. 原因就是feign接口方法的形参列表中,需要在参数前边加上@RequestPar ...
- Feign的远程调用nacos配置中心
Feign的远程服务调用 1.添加注解使服务可以被发现 <dependency><groupId>org.springframework.cloud</groupId&g ...
- SpringCloud工程搭建之Eureka服务搭建(必选)
3.1 创建Eureka子工程 完整工程源码:https://gitee.com/forwardxiang/spring-cloud-demo.git 3.1.1 IDEA操作 鼠标选中父工程并且点击 ...
- springCloud - 第4篇 - 消费者调用服务 ( Feign )
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 一.新建 ribbon 工程: 1. file - new - module 2. spring I ...
最新文章
- MinkowskiEngine多GPU训练
- 如何使用VirtualBox与GNS3搭建思科设备实验环境
- python部署到hadoop上_python实现mapreduce(2)——在hadoop中执行
- mysql 执行计划 优化_执行计划
- 呼呗电销机器人_为什么企业销售电销都用电销外呼智能机器人
- 在 C++Builder 工程里调用 DLL 函数
- 95-10-180-启动-Mx4jLoader
- notepad++配置Zen Coding
- rsyslogd以及日志轮替logrotate的梳理
- android日历读取账号,android – Outlook – 读取另一个用户的日历
- 低版本 android 软件下载,纳米盒旧版本下载-纳米盒旧版下载4.1安卓版-西西软件下载...
- 渠道类:新APP上线都有哪些具体的推广方式可以学习(最新)
- 前端的IDE工具对比
- 【安信可首款4G模组CA-01直连阿里物联网平台③】一型一密认证方式连接
- 一文了解肠-器官轴,肠好身体好
- Win10 21H1发布后的首个更新上线 包含大量的修复内容
- pta 6-8 使用函数求Fibonacci数 (15 分)
- Ubuntu 的软件管理工具
- Swagger-ui.html页面简单的修改
- 计算机用的云电脑,怎么使用云电脑玩端游