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

springcloud实战:服务间通信——OpenFeign

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

Spring Cloud OpenFeign

Spring Cloud OpenFeign是一个声明式的 HTTP客户端,它简化了HTTP客户端的开发,使编写Web服务的客户端变得更容易。使用Spring Cloud OpenFeign,只需要创建一个接口并注解,就能很容易地调用各服务提供的HTTP接口。Spring Cloud OpenFeign基于OpenFeign实现,它除了提供声明式的 HTTP客户端外,还整合了Spring Cloud Hystrix,能够轻松实现熔断器模型。

Spring Cloud对OpenFeign进行了增强,使得Spring Cloud OpenFeign支持Spring MVC注解。同时,Spring Cloud整合了Ribbon和 Eureka,这让 Spring Cloud OpenFeign的使用更加方便。

Spring Cloud OpenFeign能够帮助我们定义和实现依赖服务接口。在Spring Cloud OpenFeign的帮助下,只需要创建一个接口并用注解方式配置它,就可以完成服务提供方的接口绑定,减少在使用Spring Cloud Ribbon时自行封装服务调用客户端的开发量。

下面介绍如何在应用中集成Spring Cloud OpenFeign。

(1)在common工程中添加如下依赖:


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

(2)在public工程的启动类PublicApplication.java中加入@EnableFeignclients注解,启用OpenFeign功能:

@MapperScan(basePackages = "com. lynn.blog.pub.mapper")
@EnableFeignclients(basePackages = "com. lynn.blog")
public class PublicApplication extends Application{
}

由于每个工程的基础包名都不一致,如user 工程包名为com.lynn.blog.user,public工程包名为com.lynn.blog.pub,这里需要指定basePackages为 com. lynn.blog,以保证Spring容器可以扫描到OpenFeign注入的类(如果不指定basePackages,则默认扫描加入该注解的类所在包及其子包)。

(3)创建TestserviceFeign接口,并编写以下代码:

@FeignClient(value = "test")
public interface TestServiceFeign {
@RequestMapping("/test")
String test();
}

其中,@Feignclient("test")表示该接口是一个OpenFeign的HTTP客户端,注解内指定服务名,本示例指定test,即 test工程下spring.application.name配置的值。接口定义只需和 test工程的控制器提供的接口一致(参数名、返回值和接口地址)即可,需要注意的是,@RequestMapping指定的地址为接口地址全路径。

(4)创建控制器验证 OpenFeign的正确性。

@RequestMapping("feign")
@RestController
public class TestControllerFeign {
@Autowired
TestServiceFeign testServiceFeign;@RequestMapping( "test")
private String test(){
return testServiceFeign.test();
}
}

(5)重启 comment工程,浏览器多次访问地址
http://localhost:8203/feign/test,可以看到分别打印了9999和9998端口。

通过上述示例,我们发现 OpenFeign 使代码变得更加优雅,无须使用 RestTemplate 显式地调用HTTP服务,只需要指定想要调用的服务名即可。由于OpenFeign 内部集成了Ribbon,所以它也默认拥有了负载均衡能力。

自定义OpenFeign 配置

OpenFeign提供了默认的配置类FeignclientsConfiguration,该类使用了默认的编码器( encoder )、解码器( decoder )、合约( contract)等。因为OpenFeign 的核心是HTTP客户端,HTTP传输是通过数据包(流)进行的,所以在发送请求、接受响应的过程中,有必要对数据进行编码和解码。而OpenFeign默认使用的合约是SpringMvcContrace,它表示OpenFeign可以使用Spring MVC的注解,即上一节代码编写的@RequestMapping。

Spring Cloud OpenFeign 允许通过@Feignclient注解的configuration属性编写自定义配置,自定义配置会覆盖默认的配置。

接下来,我们以覆盖合约为例,讲解自定义配置的编写。

创建一个 OpenFeign的配置类MyFeignconfiguration,其代码如下:

@SpringBootConfiguration
public class MyFeignConfiguration {
@Bean
public Contract feigncontract()i
return new feign.contract.Default();
}
}

上述代码定义了一个Bean方法,返回Contract,即 OpenFeign合约,该合约返回的是OpenFeign的默认合约,这样我们就可以使用OpenFeign的注解而不用Spring MVC注解。

修改TestServiceFeign接口,将@RequestMapping 注解替换成@RequestLine 注解,并通过configuration属性指定自定义配置,如:

@Feignclient(value = "test",fallback = TestserviceErrorFeign.class,configuration =
MyFeignConfiguration.class)
public interface TestServiceFeign {
@RequestLine("GET /test")
String test();
}

需要注意的是,@RequestLine的属性值需要指明请求方法,比如上述代码指定请求方法为GET,如果不指定启动工程将报错。在@Feignclient注解的configuration属性中指定MyFeignConfiguration类,这样OpenFeign就会覆盖其默认配置而使用我们自定义的配置。

本文给大家讲解的内容是springcloud实战:服务间通信,SpringCloudOpenFeign

  1. 下篇文章给大家讲解的是springcloud实战:服务间通信,OpenFeign熔断;
  2. 觉得文章不错的朋友可以转发此文关注小编;
  3. 感谢大家的支持!

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

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

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

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

“springcloud实战:服务间通信——OpenFeign” 的相关文章

15款测试html5响应式的在线工具

手机、平板灯手持设备的增多,网站要顺应变化,就必须要做响应式开发,响应式网站最大的特点在于可以在不同设备下呈现不同的布局,是基于html5+css3技术,目前越来越多的网站开始采用了响应式设计,而下面15款工具可以方便测试你的html5响应式效果。Responsinatorhttp://www.re...

30 个纯 HTML5 实现的游戏

浏览器和 JavaScript 的功能逐年不断的变强变大。曾几何时,任何类型的游戏都需要Flash。但随着 HTML5 发展,HTML5 + WebGL 游戏式就慢慢占领着这个舞台。以下是30款流行的游戏,它们可以在所有现代浏览器中运行,并且只使用web技术构建。1. HexGL地址:http://...

HTML5+眼球追踪?黑科技颠覆传统手机体验

今天,iH5工具推出一个新的神秘功能——眼动追踪,可以通过摄像头捕捉观众眼球活动!为了给大家具体演示该功能的使用,我做了一个案例,供大家参考。实际效果如下:案例比较简单,就是通过眼动功能获取视觉焦点位置,剔除用户看中的牌。现在,舞台的属性中多了一个“启用眼动”的选项,另外,还多了一个“启用摄像头”的...

Solid State Logic 发布低保真数字失真插件 Digicrush

Solid State Logic 宣布推出低保真数字失真插件 Digicrush ,他们最新的创意工具具有经典数字失真的粗糙、低保真特性,完美模拟早期数字音频的衰减和伪影。Digicrush 充满怀旧气息,深受经典数字采样器和效果器的影响,具有内置抖动、可调比特深度和采样率降低功能,是为音轨添加复...

SpringBoot2.X+Vue+UniAPP,全栈开发医疗小程序

//xia仔のke:chaoxingit.com/208/全栈开发医疗小程序:利用Spring Boot 2.X、Vue和UniApp在当今数字化时代,医疗行业也在不断地迈向信息化和智能化的方向。开发一款医疗小程序,能够为用户提供便捷的医疗服务和信息查询,为医疗机构提供高效的管理和服务渠道。本文将介...

慕课 SpringBoot2.X+Vue+UniAPP,全栈开发医疗小程序

本课程以业务驱动技术栈,打造业务相对完整的掌上医疗小程序,解决大家没有好的毕设项目或者求职项目的困境。本课程案例采用前后端分离架构,业务功能完善(既有WEB管理端,也有移动用户端),界面美观,无需艰涩的技术也能做出亮眼的作品。SpringBoot2.X+Vue+UniAPP,全栈开发医疗小程序 |...