程序员的知识教程库

网站首页 > 教程分享 正文

像本地方法一样调用http服务,feign框架springboot项目实践

henian88 2024-10-20 05:51:14 教程分享 26 ℃ 0 评论
原创不易,请多多支持!对Java技术感兴趣的童鞋请关注我,后续技术分享更精彩。

概述

微服务在如今后台系统建设上大行其道,各子服务间接口交互方式,http请求协议又是首选。而相比远程方法调用的rmi接口形式,http服务对接口消费方会产生更大的接入成本。有没有两全其美,合二为一的方案?服务交互既满足通用的http协议,又能减少服务消费方的接入成本。

答案揭晓,netflix公司开源的feign框架即为该问题的完美解决方案。本文将带领大家,通过使用feign框架,在springboot项目中,实现和远程方法调用一样的本地方法调用效果。

环境

  • spring-boot 2.1.0.RELEASE
  • spring-cloud Greenwich.SR2

feign框架是基于springcloud发布的,所以项目中请添加和springboot匹配的springcloud包。注意spring-boot 最好不低于2.1.0.RELEASE版本,因为低版本依赖的feign某些功能缺失,将损失服务client jar包发布时接口构建灵活性。

依赖

项目中添加相关依赖

项目结构

risk-control-app:服务提供方项目模块。

risk-control-app-client:服务提供方对外开放的client接口模块。

risk-control-app-consume:服务消费方模块。

接口服务定义

由于服务接口是对外开放的,并以client jar文件方式集成到使用端。

在risk-control-app-client模块中定义,UserResource和ProdResource两个服务。

在ProdResource接口定义服务接口。

@FeignClient是feign框架提供的注解。通过该注解定义的接口,在服务调用时框架会自动转换为http请求,调用远程对应服务。

name属性:为feign客户端唯一标示,若微服务接入了注册中心,name对应服务注册名。

contextId属性:服务上下文标示,有时对外开放服务可能是多个接口,不同接口可以通过该属性加以区分。比如ProdResource和UserResource不同的资源。

注意feign老版本是没有contextId属性的,这意味着老版本的feign框架,服务提供方对外的接口输出文件只能有一个,因为FeignClient注解对应的name不能重复,没有contextId区分,FeignClient实例将无法初始化。

url属性:定义FeignClient访问的接口服务地址。主要用于微服务未接入注册中心的场景。若以接入注册中心,该属性可以不定义。

细心的朋友可能发现了,demo中name和url的赋值,使用了spring属性注入的方式,而不是直接写死。这样有一个好处,不同环境的FeignClient引用时,只需集成端配置文件修改相关值,无需服务提供方重新编译打包,提高配置的灵活性。

UserResource方式和ProdResource类似,不再累述。

接口服务实现

接口服务实现在risk-control-app模块中。引入risk-control-app-client依赖。并添加ProdController和UserController实现。结构如下:

接口实现如下:

接口服务消费方

risk-control-app-consume模块作为服务消费方,在项目中添加risk-control-app-client依赖,即可像调用本地方法样调用远程http服务。

application.yml配置文件中添加远程服务设置。在服务启动时能动态注入@FeignClient实例的name和url值。

入口Application类中添加EnableFeignClients注解,启用Feign。basePackages值为Feign client扫描的包路径。

业务实现类中直接添加服务资源组件属性,在方法逻辑中即可像直接调用本地方法一样,调用远程的http服务。

到此所有demo完成,是不是感觉so easy,http服务调用瞬间简单了起来。

总结

本文介绍了Feigin框架在springboot项目中的使用。通过实例讲解了,如何将http对外服务以rmi方式提供给消费端使用。定义主要步骤如下:

  • 接口分模块构建,便于对外提供client jar文件分发。接口通过@FeignClient注解标注。
  • 基于接口实现服务端逻辑。
  • 消费端通过接口的client jar依赖,使用具体接口服务方法。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表