SpringCloud OpenFeign声明式服务调用

目录

一、前言

Feign 是 Netflix 公司发布的一种实现负载均衡和服务调用的开源组件。Spring Cloud 将其与 Netflix 中的其他开源服务组件(例如 Eureka、Ribbon 以及 Hystrix 等)一起整合进 Spring Cloud Netflix 模块中,整合后全称为 Spring Cloud Netflix Feign

Feign 对 Ribbon 进行了集成,利用 Ribbon 维护了一份可用服务清单,并通过 Ribbon 实现了客户端的负载均衡。

Feign 是一种声明式服务调用组件,它在 RestTemplate 的基础上做了进一步的封装。通过 Feign,我们只需要声明一个接口并通过注解进行简单的配置(类似于 Dao 接口上面的 Mapper 注解一样)即可实现对 HTTP 接口的绑定。

Feign 支持多种注解,例如 Feign 自带的注解以及 JAX-RS 注解等,但遗憾的是 Feign 本身并不支持 Spring MVC 注解,这无疑会给广大 Spring 用户带来不便。

2019 年 Netflix 公司宣布 Feign 组件正式进入停更维护状态,于是 Spring 官方便推出了一个名为 OpenFeign 的组件作为 Feign 的替代方案

二、openFeign简介

Open Feign是Spring Cloud的二级子项目。

OpenFeign是一种声明式、模板化的HTTP客户端(仅在Application Client中使用)(称OpenFeign作用:声明式服务调用)。
声明式调用是指,就像调用本地方法一样调用远程方法,无需感知操作远程http请求

Spring Cloud的声明式调用, 可以做到使用 HTTP请求远程服务时能就像调用本地方法一样的体验,开发者完全感知不到这是远程方法,更感知不到这是个HTTP请求。

Feign的应用,让Spring Cloud微服务调用像Dubbo一样,Application Client直接通过接口方法调用Application Service,而不需要通过常规的RestTemplate构造请求再解析返回数据。它解决了让开发者调用远程接口就跟调用本地方法一样,无需关注与远程的交互细节,更无需关注分布式环境开发。

使用OpenFeign时就好像在写控制器方法,OpenFeign都是写在接口中,在声明的方法上添加SpringMVC注解或声明的参数上添加SpringMVC注解就可以完成调用远程的控制器方法。

在这里插入图片描述

Feign 和 OpenFegin的区别:
 
相同点:
(1) Feign 和 OpenFeign 都是 Spring Cloud 下的远程调用和负载均衡组件
(2) Feign 和 OpenFeign 作用一样都可以实现服务的远程调用和负载均衡
(3) Feign 和 OpenFeign 都对 Ribbon 进行了集成,都利用 Ribbon 维护了可用服务清单,并通过 Ribbon 实现了客户端的负载均衡;
(4) Feign 和 OpenFeign 都是在服务消费者(客户端)定义服务绑定接口并通过注解的方式进行配置,以实现远程服务的调用;
 
不同点:
(1) Feign 和 OpenFeign 的依赖项不同Feign 的依赖为 spring-cloud-starter-feign,而 OpenFeign 的依赖为 spring-cloud-starter-openfeign;
(2) Feign 和 OpenFeign 支持的注解不同,Feign 支持 Feign 注解和 JAX-RS 注解,但不支持 Spring MVC 注解;
(3) OpenFeign 除了支持 Feign 注解和 JAX-RS 注解外,还支持 Spring MVC 注解

三、使用OpenFeign时的程序执行流程(原理)

OpenFeign代替之前的RestTemplate代码。也是写在Application Client中把OpenFeign接口单独放在feign包中,表示服务调用层。当需要调用其他服务时,直接注入OpenFeign接口对象就可以像调用本地方法一样调用远程服务

整体流程说明:

  1. ApplicationService 向Eureka Server 注册服务。

  2. Application Client从Eureka Server中发现服务信息,获取服务列表。

  3. 在Application Client中调用OpenFeign接口中方法

  4. Application Client中OpenFeign通过应用程序名调用Application Service

在这里插入图片描述

四、Feign的应用

1.搭建SpringCloud服务注册中心

创建Springboot项目,添加如下依赖:

 <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
     <version>2.2.10.RELEASE</version>
 </dependency>

配置application.properties:

## 端口号
server.port=8083
## eureka主机名
eureka.instance.hostname=localhost
## 指定当前主机是否需要向注册中心注册(不用,因为当前主机是Server,不是client)
eureka.client.register-with-eureka=false
## 指定当前主机是否需要获取注册信息(不用,因为当前主机是Server,不是client)
eureka.client.fetch-registry=false
## 注册中心地址
eureka.client.service-url.defaultZone=http://${
   eureka.instance.hostname}:${
   server.port}/eureka

配置启动类:
在项目启动类上面使用@EnableEurekaServer,可以将项目作为Spring Cloud的注册中心(启动 Eureka 服务注册中心)
在这里插入图片描述

服务注册中心就搭建好了

2.新建Application Service项目(服务提供方)

2.1 添加依赖

添加了web环境和eureka client依赖

<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>

2.2 编写配置文件

必须要有应用程序名,因为OpenFeign是通过应用程序名进行调用。

## 端口号
server.port=8081
## 服务名称
spring.application.name=service-demo
## 将服务注册到注册中心 eureka_service 的地址
eureka.client.service-url.defaultZone=http://localhost:8083/eur
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值