feign调用 服务内无token_Spring Cloud(十三):Feign居然这么强大?

可能点击蓝字关注我们

大家好,我是杰哥

微服务架构目前已被各大公司广泛使用。至少在java界,要是说你还没有使用过微服务架构,都会觉得自己out了

我们知道,微服务架构最大的特点就是,将原先的一个服务,根据业务等角度拆分为一个个小的微服务。那么以前的方法调用,就自然会变成服务之间的通讯调用,并且系统越复杂,这样的通讯调用就越频繁。Feign,作为一个声明式Web Service客户端,自然就应运而生~

今天就开始,认识一下另一个Netflix的重要成员:Feign

一 认识

什么是Feign?

Feign,是Spring Cloud Netiflix组件中的一个轻量级Restful的HTTP服务客户端,实现了webservice面向接口编程,进一步降低了项目的耦合度。

它还封装了集成了Ribbon(负载均衡组件)和Hystrix(服务治理组件)(这两个组件后续也会进行专门的推文介绍,敬请期待哦~)

也就是说,直接使用Feign,不仅可以实现服务的远程调用,还可以实现负载均衡以及服务治理等重要功能

Spring Cloud,作为热门框架框架之一,则封装集成了Feign,使其支持了SpringMVC标准注解和消息转换器HttpMessageConverters

二 解惑

Feign解决了什么问题?

Feign是声明式服务调用组件,它的强大之处在于,实现了像调用本地方法一样调用远程方法,无感知远程HTTP 请求。类似于Dubbo的思想,Consumer直接调用Provider的接口方法,而不需要通过常规的Http Client构造请求,再解析返回数据

使得开发人员,无需关注与远程的交互细节,将更多的注意力集中在具体的业务开发

三 方式

如何使用?

总得来说,服务消费者只要使用Feign的注解定义接口,然后调用这个接口,就可以调用服务注册中心的服务,具体步骤如下:

1)服务消费者添加Feign依赖

2)启动类添加@EnableFeignClients注解,允许开启Feign调用

3)创建业务接口,添加@FeignClient接口,声明需要调用的服务

4)业务层的抽象方法,使用SpringMVC注解配置具体接口地址及调用参数

5)调用这个抽象方法

乍一看,可能会稍微有点儿抽象。别担心,接下来通过一个入门案例,你就很容易掌握啦

四 实战

入门案例

案例分为三个部分:生产者服务service-producer、消费者服务service-consumer以及注册中心eureka-server

5e682385ad0fb439f227a77799bb3ae8.png

其中service-producer和service-consumer需要分别注册在注册中心上。大家注意到,生产者包含了两个服务service-producer1和service-producer2,是为了后续验证feign的负载均衡特性,入门案例可以先不用考虑

其实我们主要关注的是消费者服务的调用过程

1 生产者服务 service-producer

1)将自己注册在注册中心上

#端口
server.port=7000
#服务名称
spring.application.name= service-producer
#注册中心地址
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/,http://localhost:8762/eureka/,http://localhost:8763/eureka/#关闭自我保护机制eureka.server.enableSelfPreservation=false

2)提供接口/coffee/

5cdb0a17ca4e49d9b20560971ceb36a8.png

3)启动服务,服务已注册在eureka

dad2faf8059456e5538b3f0ebab6ce68.png

接口访问成功返回

c0ae0b5f4d3022c59e79b96c95d9bc8e.png

2 消费者服务 service-consumer

1)服务消费者添加Feign依赖,添加配置

org.springframework.cloudspring-cloud-starter-openfeign

配置文件如下

server.port=9090spring.application.name= service-consumer#作为消费者,不需要注册在注册中心上eureka.client.register-with-eureka=false#l拉取f服务d的s时间间隔为10seureka.client.registry-fetch-interval-seconds=10eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/,http://localhost:8762/eureka/,http://localhost:8763/eureka/#关闭自我保护机制eureka.server.enableSelfPreservation=false

2)启动类添加@EnableFeignClients注解,允许开启Feign调用

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClientspublic class ConsumerApplication {public static void main(String[] args)
{
SpringApplication.run(ConsumerApplication.class, args);}
}

3)创建业务接口,添加@FeignClient接口,声明需要调用的服务

4)业务层的抽象方法,使用SpringMVC注解配置具体接口地址及调用参数

@FeignClient(value = "service-producer")public interface ICoffeeService {@GetMapping("/coffee/")public ListfindAll();}

5)调用这个抽象方法

@Controller
@RequestMapping("/consumer/v1")@Slf4jpublic class ConsumerController {//常规操作,注入ICoffeeService即可@Autowiredprivate ICoffeeService coffeeService;@GetMapping(path = "/getCoffee")@ResponseBodypublic ListgetCoffeeList(){
List coffees = coffeeService.findAll();log.info("get the coffeeList :{}",coffees);
return coffees;}@GetMapping(path = "/getCoffeeById")@ResponseBodypublic Coffee getCoffeeById(){
Coffee coffee = coffeeService.getCoffeeById(1l);
return coffee;}
}

6)测试访问

801b688f1e81fe1561fb95dd96a138ce.png

好了,一个例子就实现了,是不是比使用RestTemplate去调用一个http接口的方式简单多了

五 总结

总而言之

好了,本篇分别带着大家重新了解了一下Feign是什么,并通过一个入门案例,让大家也能够轻松学会Feign的使用方式 有木有很简单?是嘛!技术本身就是朝着越来越简单的方向发展的呢。而且你也会感知到,微服务组件实际上也在渐渐进行功能的整合,以渐渐简化微服务项目的各个业务场景以及开发和运维的复杂性。比如之前讲到的Nacos,既可以做 配置中心 ,又可以作为项目的 注册中心 来使用,而作为注册中心,还分别支持 AP 和 CP 两种场景 但也要说一句,随着微服务的越来越热门,微服务架构的确会渐渐变得精简起来,但底层的东西基本不会变,所以还是耐心学起来吧~ 嗯,就这样。每天学习一点,时间会见证你的强大~ 下期预告: Spring Cloud(十四):Feign的原理探究 31c9bec5501b696811bdcbb2f22e9e68.png

往期精彩回顾

928adcb0b5d4bc82ab787f255b3ee747.png SpringCloud篇章 Spring Cloud(十):消息中心篇-Kafka经典面试题,你都会吗? Spring Cloud(九):注册中心选型篇-四种注册中心特点超全总结 Spring Cloud(四):公司内部,关于Eureka和zookeeper的一场辩论赛 Spring Cloud(一):我与导师的对话:你真的了解zookeeper吗? .......... Spring Boot篇章 Spring Boot(八):Spring Boot的监控法宝:Actuator Spring Boot(七):你不能不知道的Mybatis缓存机制! Spring Boot(六):那些好用的数据库连接池们 Spring Boot(四):让人又爱又恨的JPA SpringBoot(一):特性概览 .......... 职业、生活感悟 你有没有想过,旅行的意义是什么? 程序员的职业规划 让程序员崩溃的十个瞬间!第6个简直不能忍! 知与爱 聊聊这次换工作经历 欢迎大家关注们的公众号,一起持续性学习吧~ a8200839216faceebf2a811053794cc1.gif           
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值