当前位置:首页 > 技术分析 > 正文内容

Spring Cloud(十三):Feign居然这么强大?

ruisui883个月前 (02-03)技术分析27

大家好,我是杰哥


微服务架构目前已被各大公司广泛使用。至少在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


其中service-producerservice-consumer需要分别注册在注册中心上。大家注意到,生产者包含了两个服务service-producer1service-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/


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



接口访问成功返回


2 消费者服务 service-consumer

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




    org.springframework.cloud
    spring-cloud-starter-openfeign

配置文件如下


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


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


@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public 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 List findAll();
}

5)调用这个抽象方法


@Controller
@RequestMapping("/consumer/v1")
@Slf4j
public class ConsumerController {

    //常规操作,注入ICoffeeService即可
    @Autowired
    private ICoffeeService coffeeService;
    @GetMapping(path = "/getCoffee")
    @ResponseBody
    public List getCoffeeList(){
        List coffees = coffeeService.findAll();
        log.info("get the coffeeList :{}",coffees);
        return coffees;
    }

    @GetMapping(path = "/getCoffeeById")
    @ResponseBody
    public Coffee getCoffeeById(){
        Coffee coffee = coffeeService.getCoffeeById(1l);
        return coffee;
    }
}

6)测试访问


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


五 总结

总而言之


好了,本篇分别带着大家重新了解了一下Feign是什么,并通过一个入门案例,让大家也能够轻松学会Feign的使用方式

有木有很简单?是嘛!技术本身就是朝着越来越简单的方向发展的呢。而且你也会感知到,微服务组件实际上也在渐渐进行功能的整合,以渐渐简化微服务项目的各个业务场景以及开发和运维的复杂性。比如之前讲到的Nacos,既可以做配置中心,又可以作为项目的注册中心来使用,而作为注册中心,还分别支持APCP两种场景


但也要说一句,随着微服务的越来越热门,微服务架构的确会渐渐变得精简起来,但底层的东西基本不会变,所以还是耐心学起来吧~


嗯,就这样。每天学习一点,时间会见证你的强大~

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/1191.html

标签: feign 使用
分享给朋友:

“Spring Cloud(十三):Feign居然这么强大?” 的相关文章

专为系统管理员设计的LINUX发行版SYSLINUXOS

SysLinuxOS 承诺“结束为管理任务寻找正确工具”的局面,提供“非常广泛的软件选择,特别是用于使用互联网”。译自 SysLinuxOS, A Linux Distro for System Administrators,作者 David Cassel。全球各地的系统集成商正在发现 SysLin...

带你五步学会Vue SSR

作者:liuxuan 前端名狮转发链接:https://mp.weixin.qq.com/s/6K6GUHcLwLG4mzfaYtVMBQ前言SSR大家肯定都不陌生,通过服务端渲染,可以优化SEO抓取,提升首页加载速度等,我在学习SSR的时候,看过很多文章,有些对我有很大的启发作用,有些就只是照搬官...

博信股份新战略后再推新品 TOPPERS E2耳机售价199元

中新网6月21日电 20日,博信股份在北京正式推出新品TOPPERS主动降噪耳机E2,这是博信股份继2月战略暨新品发布会后的第二次新品亮相。价格方面,TOPPERS主动降噪耳机E2零售价199元,并于6月20日下午4点在京东商城公开销售。据介绍,TOPPERS主动降噪耳机E2采用AMS(奥地利微电子...

一起学Vue:路由(vue-router)

前言学习vue-router就要先了解路由是什么?前端路由的实现原理?vue-router如何使用?等等这些问题,就是本篇要探讨的主要问题。vue-router是什么路由是什么?大概有两种说法:从路由的用途上来解释路由就是指随着浏览器地址栏的变化,展示给用户的页面也不相同。从路由的实现原理上来解释路...

关于Vue页面跳转传参,参数不同, 但页面只获取参数一次的问题

#头条创作挑战赛#1.问题描述问题描述: element 展示表格(页面A),点击表格的每一行的查看详情按钮,可以携带此行的信息参数跳转到另一个页面(页面B),但是从A页面到B页面,只有第一次跳转的时候B页面可以获取到A页面的参数,返回再次A->B ,B页面无法获取到参数。2.解决办法:方法一...

前端路由简介以及vue-router实现原理

作者:muwoo 来源:https://zhuanlan.zhihu.com/p/37730038后端路由简介路由这个概念最先是后端出现的。在以前用模板引擎开发页面时,经常会看到这样http://www.xxx.com/login 大致流程可以看成这样:浏览器发出请求服务器监听到80 端口(或443...