31.【微服务架构】SpringCloud之Feign(五)
Feign简介
Feign 是一个声明web服务客户端,这便得编写web服务客户端更容易,使用Feign 创建一个接口并对它进行注解,它具有可插拔的注解支持包括Feign注解与JAX-RS注解,Feign还支持可插拔的编码器与解码器,Spring Cloud 增加了对 Spring MVC的注解,Spring Web 默认使用了HttpMessageConverters, Spring Cloud 集成 Ribbon 和 Eureka 提供的负载均衡的HTTP客户端 Feign.
Feignm—个声明式的Web服务客户端,使得编写Web服务客户端变得非常容易,
只需要创建一个接口,然后在上面添加注解即可。
官网:https://github.com/OpenFeign/feign
Feign能干什么
Feign旨在使编写java Http客户端变得更容易。
前面在使用Ribbon+RestTemplate时,利用RestTemplate对http请求的封装处理,形成了一套模版化的调用方法。但是在实际 开发中,由于对服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以通常都会针对每个微服务自行封装一些客户端 类来包装这些依赖服务的调用。所以,Feign在此基础上做了进一步封装,由他来帮助我们定义和实现依赖服务接口的定义。在 Feign的实现下,我们只需创建接口并使用注解的方式来配置它(以前是Dao接口上面标注Mapper注解,现在是是微服务接口上面标注一个Feign注解即可),即可完成对服务提供方的接口绑定 , 简化了使用Spring cloud Ribbon时,自动封装服务调用客户端的开发量。
Feign集成了Ribbon
利用 Ribbon 维护了 MicroserviceCloud-dept 的服务列表信息,并且通过轮询实现了客户端的负载均衡。
而与Ribbon不同的是通过feign只需要定义服务绑定接口且以声明式的方法,优雅而简单的实现了服务调用。


pom修改
feign可能被很多项目都用,所以pom放在api公共项目的pom.xml文件中。
<!-- 旧版本 ,本文档以旧版本例子讲解-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency> <!-- 新版本 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
新增Service到microservicecloud-api项目中,以便这个方法对外暴露可以被各个微服务项目直接引用
package com.everjiankang.springcloud.service; import java.util.List; import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import com.everjiankang.springcloud.entity.Dept; @FeignClient(value="MICROSERVICECLOUD-DEPT") //微服务名称
public interface DeptService { @RequestMapping(value = "/consumer/dept/add",method=RequestMethod.POST)
public boolean add(Dept dept); @RequestMapping(value = "/consumer/dept/get/{id}",method=RequestMethod.GET)
public Dept get(Long id); @RequestMapping(value = "/consumer/dept/list",method=RequestMethod.GET)
public List<Dept> list();
}
在microservicecloud-consumer-dept-feign项目的启动类上加注解:
@SpringBootApplication
@ComponentScan(basePackages = {"com.everjiankang.springcloud"})
@MapperScan(basePackages = {"com.thc.adt.*.dao"})
@EnableFeignClients(basePackages = {"ccom.everjiankang.springcloud"})
@EnableAspectJAutoProxy
@EnableScheduling
public class AdtApplication { public static void main(String[] args) {
SpringApplication.run(AdtApplication.class, args);
}
}
Feign 通过接口的方法调用Rest服务(之前是 Ribbon + RestTemPlate )
该请求发送给 Eureka 服务器(http://MICROSERVICECLOUD一DEPT/dept/list)
通过 Feign 直接找到服务接口,由于在进行服务调用的时候融合了 Ribbon 技术所以也支持负载均衡作用. Feign请求拦截器:
@Component
@Configuration
public class FeignInterceptor implements RequestInterceptor { @Bean
public Logger.Level feignLogger(){
return Logger.Level.FULL;
} // PermissionFeign permissionFeign; @Override
public void apply(RequestTemplate requestTemplate) {
requestTemplate.header("Accept", "application/json");
requestTemplate.header("Accpet-Encoding", "gzip");
requestTemplate.header("Content-Encoding", "UTF-8");
requestTemplate.header("Content-Type", "application/json; charset=UTF-8"); if (!StringUtils.isEmpty(SessionUtil.getToken())){
requestTemplate.header("x-access-token",SessionUtil.getToken());
}
}
}
31.【微服务架构】SpringCloud之Feign(五)的更多相关文章
- 微服务架构 - SpringCloud整合分布式服务跟踪zipkin
1.zipkin zipkin是Twitter的一个开源项目,它基于Google Dapper实现.我们可以使用它来收集各个服务器上请求链路的跟踪数据,并通过它提供的REST API接口来辅助我们查询 ...
- 微服务之SpringCloud实战(五):SpringCloud Eureka详解
Eureka详解 在第三节高可用中,实际已经讲解了服务的注册,只不过注册的是Eureka本身,原理相同,通过这几篇文章我相信大家对Eureka有了一定的了解,三个核心角色:服务注册中心.服务提供者和服 ...
- SpringCloud微服务架构和SOA架构
1,传统的三层架构 在传统的架构中,SSH,SSM,主要分为web 控制层,业务逻辑层,数据库访问层,单点项目,项目没有拆分,所有的开发任务全部写在一个项目中,耦合度比价高,如果程序中的一个功能出现了 ...
- 微服务之SpringCloud基础
SpringCloud微服务基础 微服务架构--SpringCloud网站架构模式 单点应用/分布式系统面向于服务架构(SOA) /微服务架构web项目三层架构1.控制层2.业务逻辑层3.数据访问层传 ...
- springcloud微服务架构搭建
SpringCloud微服务框架搭建 一.微服务架构 1.1什么是分布式 不同模块部署在不同服务器上 作用:分布式解决网站高并发带来问题 1.2什么是集群 多台服务器部署相同应用构成一个集群 作用:通 ...
- springcloud与docker微服务架构实战--笔记
看了<微服务那些事>之后,Spring boot和Spring Cloud的关系理清楚了,Spring cloud各个模块的作用也了解了. 但是,Spring cloud 与Docker的 ...
- Java生鲜电商平台-SpringCloud微服务架构高并发参数优化实战
Java生鲜电商平台-SpringCloud微服务架构高并发参数优化实战 一.写在前面 在Java生鲜电商平台平台中相信不少朋友都在自己公司使用Spring Cloud框架来构建微服务架构,毕竟现在这 ...
- 用SpringCloud进行微服务架构演进
在<架构师必须要知道的阿里的中台战略与微服务> 中已经阐明选择SpringCloud进行微服务架构实现中台战略,因此下面介绍SpringCloud的一些内容,SpringCloud已经出来 ...
- SpringCloud微服务架构分布式组件如何共享session对象
一.简单做一个背景说明1.为说明问题,本文简单微服务架构示例如下 2.组件说明分布式架构,每个组件都是集群或者主备.具体说明如下:zuul service:网关,API调用都走zuul service ...
- springcloud微服务实战:Eureka+Zuul+Feign/Ribbon+Hystrix Turbine+SpringConfig+sleuth+zipkin
相信现在已经有很多小伙伴已经或者准备使用springcloud微服务了,接下来为大家搭建一个微服务框架,后期可以自己进行扩展.会提供一个小案例: 服务提供者和服务消费者 ,消费者会调用提供者的服务,新 ...
随机推荐
- Redhat 用代理连外网
设置 /etc/yum.conf 添加proxy=http://web-proxy.corp.xx.com:8080 /etc/yum.repos.d/rhel-source.repo 里面改成ena ...
- luogu3292 幸运数字 (点分治+线性基)
首先第一眼是一个倍增套线性基,但是$O(Qlog^2Vlog^N)=10^{10}$的复杂度... 即使是st表也只是变成了$O(Nlog^2Vlog^N)$啊 考虑点分治,相对于倍增显著减少了线性基 ...
- POJ-3436 ACM Computer Factory(网络流EK)
As you know, all the computers used for ACM contests must be identical, so the participants compete ...
- Pro Git
1.安装 Linux: $ yum install git $ apt-get install git windows: 打开 http://git-scm.com/download/win,下载会自 ...
- A.01.02—模块的输入—高端输入
高端输入即一个高电平信号输入到模块,模块采样时最典型的是采用下拉电阻采样,当然,还有限流电阻和分压电阻,具体可以参见实际电路. 高端输入在汽车上用得不多,这种类型的输入既可以是开关提供的也可以是模块提 ...
- LOJ#2134 小园丁与老司机
我的妈呀,这码农神题...... 第一问是个DP,要记录方案.先把纵向的转移建图.发现可以按照y坐标来划分阶段,每一层vector存一下,用前后缀最大值来转移. 第二问考虑所有可能成为最优方案的边.从 ...
- A1137. Final Grading
For a student taking the online course "Data Structures" on China University MOOC (http:// ...
- ImageMagick:获取一行文字的宽与高
double *fm = MagickQueryFontMetrics(mw_temp, dw_wand, text_utf8); //获取文字在指定字体和字号下的宽度和高度 double textW ...
- 第三十六节,目标检测之yolo源码解析
在一个月前,我就已经介绍了yolo目标检测的原理,后来也把tensorflow实现代码仔细看了一遍.但是由于这个暑假事情比较大,就一直搁浅了下来,趁今天有时间,就把源码解析一下.关于yolo目标检测的 ...
- VUE通过id从列表页跳转到相对的详情页
新闻列表页面: 在这里我用a标签进行跳转,在vue里面可以这样写<router-link></router-link> 1 <router-link :to=" ...