Spring注解之@FeignClient注解使用方法
声明接口时在代码中通过@Resource注入容器之后即可使用。@FeignClient注解的常用属性如下:
- value/name:value和name的作用一样,用于指定FeignClient的名称;如果没有配置url,而且项目使用了Eureka 、nacos或者ribbon,name属性会作为微服务的名称,用于服务发现。反之,只是一个名称。此属性和 spring.application.name 对应。
- url:一般用于调试,作用是指定@FeignClient调用的API地址,而非从服务中心获取。
url和name都可以使用占位符,比如:@FeignClient(name = “your.feign.name",url="${your.feign.url}”);
- decode404:当发生http 404错误时,如果该字段为true,会调用decoder进行解码;否则,抛出FeignException。
- configuration:Feign配置类,作用是自定义Feign的Encoder、Decoder、LogLevel、Contract。
- fallback:定义容错的处理类,当调用远程接口失败或超时时,会调用对应接口的容错逻辑,fallback指定的类必须实现@FeignClient标记的接口。
- fallbackFactory:工厂类,用于生成fallback类实例,实现每个接口通用的容错逻辑,减少重复的代码。
- path:定义当前FeignClient的统一前缀。
- contextId:为某个接口设置单独的超时,与与config里的属性对应。
添加依赖和启动注解
spring-boot-starter-parent版本是2.5.0,需要添加的maven坐标:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>3.0.4-SNAPSHOT</version>
</dependency>
添加启动注解:
@SpringBootApplication
@EnableFeignClients//添加这个注解
public class XXXXApplication {
public static void main(String[] args) {
SpringApplication.run(XXXXApplication.class, args);
}
}
沙场秋点兵
首先,在yaml文件中配置常量self.github.url=https://api.github.com
,然后,创建接口类,此接口类定义了需要调用的目标服务中的方法,用Feign官方文档中调用GitHub服务的例子来举例。
import com.swagger.demo.bean.Contributor;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import java.util.List;
//@FeignClient(name = "github", url = "https://api.github.com")
@FeignClient(name = "github", url = "${self.github.url}",
fallback = GithubFeignClient.MyDefaultFallback.class)
public interface GithubFeignClient {
@GetMapping(value = "/repos/{owner}/{repo}/contributors")
ResponseEntity<List<Contributor>> listContributors(
@PathVariable("owner") String owner,
@PathVariable("repo") String repo);
/**
* 容错处理类,当调用失败时,简单返回空list
*/
@Component
class MyDefaultFallback implements GithubFeignClient {
@Override
public ResponseEntity<List<Contributor>> listContributors(
@PathVariable("owner") String owner,
@PathVariable("repo") String repo) {
return new ResponseEntity(new ArrayList<>(), HttpStatus.BAD_REQUEST);
}
}
}
// --------- 新增实体类 -----------
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Setter
@Getter
@ToString
public class Contributor {
/**
* 作者
*/
private String login;
/**
* 贡献次数
*/
private int contributions;
}
上述被注释的、使用注解@FeignClient的方法也可以使用。MyDefaultFallback类是容错类。下面创建一个controller:
import com.swagger.demo.bean.Contributor;
import com.swagger.demo.bean.GithubDTO;
import com.swagger.demo.service.GithubFeignClient;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping("/github")
public class GithubClientController {
@Resource
private GithubFeignClient githubFeignClient;
@PostMapping("/listContributors")
public ResponseEntity<List<Contributor>> listContributors(@RequestBody GithubDTO githubDTO) {
return githubFeignClient.listContributors(githubDTO.getOwner(), githubDTO.getFeign());
}
}
创建idea http类型的测试用例:
### 查询github 贡献者信息
POST http://localhost:8087/wiener/github/listContributors
Content-Type: application/json
{
"owner": "openFeign",
"feign": "feign"
}
启动服务,执行如上测试用例,执行结果如下所示,说明服务调用成功:
last-modified: Tue, 01 Feb 2022 03:52:53 GMT
link: <https://api.github.com/repositories/10981994/contributors?page=2>; rel="next", <https://api.github.com/repositories/10981994/contributors?page=6>; rel="last"
[
{
"login": "adriancole",
"contributions": 135
},
{
"login": "velo",
"contributions": 126
},
{
"login": "kdavisk6",
"contributions": 121
},
{
"login": "snyk-bot",
"contributions": 45
},
{
"login": "quidryan",
"contributions": 43
},
{
"login": "rspieldenner",
"contributions": 14
},
{
"login": "davidmc24",
"contributions": 12
},
{
"login": "radio-rogal",
"contributions": 12
},
{
"login": "ahus1",
"contributions": 6
},
{
"login": "spencergibb",
"contributions": 5
},
{
"login": "ashleyfrieze",
"contributions": 5
},
{
"login": "allenxwang",
"contributions": 5
},
{
"login": "gimbimloki",
"contributions": 4
},
{
"login": "jkschneider",
"contributions": 4
},
{
"login": "nmiyake",
"contributions": 4
},
{
"login": "rfalke",
"contributions": 4
},
{
"login": "SimY4",
"contributions": 3
},
{
"login": "bstick12",
"contributions": 3
},
{
"login": "mstrYoda",
"contributions": 3
},
{
"login": "jacob-meacham",
"contributions": 3
},
{
"login": "pnepywoda",
"contributions": 3
},
{
"login": "santhosh-tekuri",
"contributions": 3
},
{
"login": "jerzykrlk",
"contributions": 3
},
{
"login": "Augustine-C",
"contributions": 2
},
{
"login": "benmanbs",
"contributions": 2
},
{
"login": "schlosna",
"contributions": 2
},
{
"login": "dharmeshjogadia",
"contributions": 2
},
{
"login": "edio",
"contributions": 2
},
{
"login": "androidfred",
"contributions": 2
},
{
"login": "stromnet",
"contributions": 2
}
]
小结
以上就是这篇文章的全部内容了,希望本文对大家的学习或者工作具有一定的参考和学习价值;如果有疑问,大家可以在评论区留言交流,也希望大家多多点赞关注。谢谢大家对楼兰胡杨的支持!
Reference
Spring注解之@FeignClient注解使用方法的更多相关文章
- Spring Boot中@Scheduled注解的使用方法
Spring Boot中@Scheduled注解的使用方法 一.定时任务注解为@Scheduled,使用方式举例如下 //定义一个按时间执行的定时任务,在每天16:00执行一次. @Scheduled ...
- FeignClient注解及参数
一.FeignClient注解 FeignClient注解被@Target(ElementType.TYPE)修饰,表示FeignClient注解的作用目标在接口上 1 2 3 4 5 @FeignC ...
- SpringCloud 服务间互相调用 @FeignClient注解
SpringCloud搭建各种微服务之后,服务间通常存在相互调用的需求,SpringCloud提供了@FeignClient 注解非常优雅的解决了这个问题 首先,保证几个服务都在一个Eureka中注册 ...
- Spring SpringMVC SpringBoot SpringCloud 注解整理大全
Spring SpringMVC SpringBoot SpringCloud 注解整理 才开的博客所以放了一篇以前整理的文档,如果有需要添加修改的地方欢迎指正,我会修改的φ(๑˃∀˂๑)♪ Spri ...
- 那天晚上和@FeignClient注解的深度交流
废话篇 那晚,我和@FeignClient注解的深度交流了一次,爽! 主要还是在技术群里看到有同学在问相关问题,比如: contextId是干嘛的?name相同的多个Client会报错? 然后觉得有必 ...
- [Spring框架]Spring开发实例: XML+注解.
前言: 本文为自己学习Spring记录所用, 文章内容包括Spring的概述已经简单开发, 主要涉及IOC相关知识, 希望能够对新入门Spring的同学有帮助, 也希望大家一起讨论相关的知识. 一. ...
- 深入理解spring中的各种注解
Spring中的注解大概可以分为两大类: 1)spring的bean容器相关的注解,或者说bean工厂相关的注解: 2)springmvc相关的注解. spring的bean容器相关的注解,先后有:@ ...
- Spring依赖注入:注解注入总结
更多11 spring 依赖注入 注解 java 注解注入顾名思义就是通过注解来实现注入,Spring和注入相关的常见注解有Autowired.Resource.Qualifier.S ...
- Spring MVC常用的注解类
一.注解类配置 要使用springmvc的注解类,需要在springmvc.xml配置文件中用context:component-scan/扫描:  二.五大重要的注解类 1.RequestMapp ...
- Spring MVC中基于注解的 Controller
终于来到了基于注解的 Spring MVC 了.之前我们所讲到的 handler,需要根据 url 并通过 HandlerMapping 来映射出相应的 handler 并调用相应的方法以响 ...
随机推荐
- 基于注意力机制与改进TF-IDF的推荐算法
前言 本篇文章是2020年8月发表于<计算机工程>的一篇期刊论文,文章名称<基于注意力机制与改进TF-IDF的推荐算法>. 文章针对传统推荐系统主要依赖用户对物品的评分数据而无 ...
- 针对N=p^rq分解之初探
针对N=p^r*q分解之初探 论文地址:https://eprint.iacr.org/2015/399.pdf 题目:https://www.nssctf.cn/problem/2016 from ...
- python excel 读取:如何读取符合多个条件的记录【出差、外出、调休、年假】
if 语句结合or 实现:读取所有出差.外出.调休.年假的记录 if '出差' in str(c_cell) or '外出' in str(c_cell) or'调休' in str(c_cell) ...
- Netty基础—4.NIO的使用简介
大纲 1.Buffer缓冲区 2.Channel通道 3.BIO编程 4.伪异步IO编程 5.改造程序以支持长连接 6.NIO三大核心组件 7.NIO服务端的创建流程 8.NIO客户端的创建流程 9. ...
- final关键字、Object类--java进阶day01
1.规则 被final修饰的变量,名称都要大写,多单词的名称则需_来分隔 1.修饰方法 method方法已经不能被重写了,因为修饰该方法的是final 2.修饰类 当一个类中所有的成员方法都不想被重写 ...
- 【SpringCloud】微服务架构编码构建
微服务架构编码构建 约定>配置>编码 Mysql的主从 slave会从master读取binlog来进行数据同步 三步骤+原理图 MySQL复制过程分成三步: master将改变记录到二进 ...
- DeepSeek 聊天机器人项目
想要更深入玩转聊天机器人开发? 推荐本文档 + 课程<DeepSeek 聊天机器人项目>一起学习,效果翻倍! 边学边练,轻松打造智能对话系统~ (๑•̀ㅂ•́)و✧ 快上车,AI 之旅发车 ...
- SRE网站可靠性工程师
SRE网站可靠性工程师 SRE需要做什么? 一般: 故障模式,尤其是SPOF(单点故障).消除SPOFs是你作为SRE最大的挑战和乐趣. 基础设施组件,从应用程序到硬件(服务器.交换机.路由器.互联网 ...
- DevOps与:cloud,IaC,Container,Microservices, Serverless
本文我们来理一理当下最火的技术与DevOps的关系,2020年可以考虑从如下的几方面来改进DevOps. DevOps代表开发和运营.它的目标是将开发.质量保证和运营(部署和集成)合并到一个单一的.连 ...
- 0x02 数据结构
目录 数据结构 链表与邻接表 单链表 双链表 栈与队列 单调栈与队列 KMP KMP算法 Trie字典树 并查集 朴素并查集 维护Size的并查集 维护到祖宗节点距离的并查集 堆 哈希表 拉链法 开放 ...