SpringCloud Feign
⒈Feign是什么?
Feign是Netflix开发的声明式、模板化的HTTP客户端, Feign可以帮助我们更快捷、优雅地调用HTTP API。
SpringCloud微服务项目之间调用是通过Rest请求来进行服务调用的,之前我们用到RestTemplate来进行服务请求,Spring通过Feign将RestTemplate封装成了可声明式的web客户端,使得编写web客户端更加简单。
在Spring Cloud中,使用Feign非常简单——创建一个接口,并在接口上添加一些注解,代码就完成了。Spring Cloud对Feign进行了增强,使Feign支持了Spring MVC注解和HttpmessageConverters、Feign注解或者JAX-RS注解等。Feign还支持可插拔的编码器和解码器,SpringCloud还对Feign集成了注册中心(Eureka)和客户端负载均衡(Ribbon),使得我们拥有一个客户端负载均衡的web请求客户端。
⒉示例
①在服务消费者项目工程中添加Feign依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
②创建一个Feign接口,并添加@FeignClient注解
package cn.coreqi.feign; import cn.coreqi.entities.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import java.util.List; @FeignClient(value = "USER-PROVIDER") //指定微服务实例名称
public interface UserFeignClient {
@GetMapping("/users") //指定调用微服务的服务地址
public List<User> getList();
}
③修改Controller代码,让其调用Feign接口
package cn.coreqi.controller; import cn.coreqi.entities.User;
import cn.coreqi.feign.UserFeignClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestOperations;
import java.util.List; @RestController
public class UserController {
@Autowired
private RestOperations restTemplate; @Autowired
private UserFeignClient userFeignClient; @GetMapping("/userno1")
public User getUsersFirst(){
User[] users = restTemplate.getForObject("http://user-provider/users",User[].class);
return users[0];
} @GetMapping("/userno2")
public User getUsersFirst1(){
List<User> users = userFeignClient.getList();
return users.get(0);
}
}
④修改主程序启动类,为其添加@EnableFeignClients注解
package cn.coreqi; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestOperations;
import org.springframework.web.client.RestTemplate; @SpringBootApplication
@EnableDiscoveryClient //开启服务发现功能
@EnableFeignClients(basePackages = {"cn.coreqi"})
public class SpringbootcloudserviceconsumerApplication { public static void main(String[] args) {
SpringApplication.run(SpringbootcloudserviceconsumerApplication.class, args);
} @Bean
@LoadBalanced //使用负载均衡机制
public RestOperations restTemplate(){
return new RestTemplate();
} }
⒊总结
其实通过Feign封装了HTTP调用服务方法,使得客户端像调用本地方法那样直接调用方法,类似Dubbo中暴露远程服务的方式,区别在于Dubbo是基于私有二进制协议,而Feign本质上还是个HTTP客户端。
SpringCloud Feign的更多相关文章
- SpringCloud+Feign环境下文件上传与form-data同时存在的解决办法(2)
书接上文. 上文中描述了如何在 SpringCloud+Feign环境下上传文件与form-data同时存在的解决办法,实践证明基本可行,但却会引入其他问题. 主要导致的后果是: 1. 无法与普通Fe ...
- SpringCloud Feign 之 Fallback初体验
SpringCloud Feign 之 Fallback初体验 在微服务框架SpringCloud中,Feign是其中非常重要且常用的组件.Feign是声明式,模板化的HTTP客户端,可以帮助我们更方 ...
- SpringCloud Feign 之 超时重试次数探究
SpringCloud Feign 之 超时重试次数探究 上篇文章,我们对Feign的fallback有一个初步的体验,在这里我们回顾一下,Fallback主要是用来解决依赖的服务不可用或者调用服务失 ...
- SpringCloud Feign通过FallbackFactory显示异常信息
SpringCloud Feign可以进行服务消费,而且内置了Hystrix,能够进行熔断. Feign可以通过fallback指定熔断回调的类.代码示例及讲解可见: https://www.cnbl ...
- springCloud feign使用/优化总结
基于springCloud Dalston.SR3版本 1.当接口参数是多个的时候 需要指定@RequestParam 中的value来明确一下. /** * 用户互扫 * @param uid 被扫 ...
- SpringCloud Feign的分析
Feign是一个声明式的Web Service客户端,它使得编写Web Serivce客户端变得更加简单.我们只需要使用Feign来创建一个接口并用注解来配置它既可完成. @FeignClient(v ...
- SpringCloud Feign context-path踩到的坑
最近在使用SpringCloud的context-path时,遇到了一些坑,记录一下. server.context-path(上下文) 服务提供者的application配置文件中有一个属性叫ser ...
- SpringCloud+Feign环境下文件上传与form-data同时存在的解决办法
最近项目转型使用SpringCloud框架下的微服务架构,各微服务之间使用Feign进行调用.期间,发现若被调用方法涉及到文件上传且仅存在单个文件时,一切正常,代码片段如下: @RequestMapp ...
- SpringCloud Feign重试详解
摘要: 今天在生产环境发生了数据库进程卡死的现象,除了sql因为全量更新,没加索引的原因,最主要还是我们的接口的服务器端接口出现问题了.忽视了更新接口的幂等性,以及调用方feign client的重试 ...
随机推荐
- 发送HTTP_GET请求 表头application/json
/** * 发送HTTP_GET请求 * 该方法会自动关闭连接,释放资源 * @param reqURL 请求地址(含参数) * @param decodeCharset 解码字符集,解析响应数据时用 ...
- ansible基础-ansible角色的使用
ansible基础-ansible角色的使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们建议把多个节点都会用到的功能将其定义模块,然后谁要用到该模块就直接调用即可!而在a ...
- my live boadband
id_boadband tel: 02511931324 ¥1600 包2年,10MB/S =100Mb,2018.12.1 ~ 2020.12.1 end
- Compiling R-3.4.3 on CentOS 6.10 with GNU
If you are compiling CentOS 6, you will notice that the R source will not compile without a updated ...
- ipython介绍及使用
1. IPython介绍 ipython是一个python的交互式shell,比默认的python shell好用得多,支持变量自动补全,自动缩进,支持bash shell命令,内置了许多很有用的功能 ...
- ssh框架里拦截器的权限验证基本思路【转】
相关表 序号 表性质 表名 字段 字段 字段 字段 字段 1 基表 用户表 id 帐号 密码 2 基表 角色表 id 角色名 3 基表 权限表 id 权限名 请求路径 4 ...
- React 记录(1)
作为一个前端工程师,前端框架是必须会的,所以开始学习React. 学习的方法是:先实践,后图文记录. React官网:https://reactjs.org React中文网站:https://www ...
- Leetcode 137 Single Number II 仅出现一次的数字
原题地址https://leetcode.com/problems/single-number-ii/ 题目描述Given an array of integers, every element ap ...
- 修改xshell的默认字间距和行间距
可能是不小心修改了xshell的某个配置,导致打开的会话中显示字间距和行间距都非常大,严重影响工作.参照官方手册也不能修改正常,详见:http://www.xshellcn.com/wenti/xiu ...
- [译]SQL SERVER 2016 – Temporal Tables
原文 Temporal Table是SQL Server2016的新特性.能存储你表里面任意时间点的数据信息. 换句话说,如果你针对一张表执行任何更新或者删除操作,老数据会被新数据覆盖,下次查询的时候 ...