SpringCloud微服务服务间调用之OpenFeign介绍(一)

开发微服务,免不了需要服务间调用。Spring Cloud框架提供了RestTemplate和FeignClient两个方式完成服务间调用,本文简要介绍如何使用OpenFeign完成服务间调用

背景介绍

本示例使用consul作为服务注册中心,基于SpringCloud框架开发两个微服务,一个user-service(服务提供方),一个feignusercommodity-service(服务调用方),具体版本信息如下

软件/框架 版本
consul v1.2.0
Spring Boot 2.0.1.RELEASE
Spring Cloud Finchley.RELEASE

openFeign使用默认版本的,也就是spring-cloud-starter-openfeign 2.0.0版本。

完整代码这这里, user-servciefeignusercommodity-service, 欢迎加星,fork。

官方文档在这里http://cloud.spring.io/spring-cloud-openfeign/single/spring-cloud-openfeign.html

主要代码

核心代码主要包括两点,
1, 对应接口添加@FeignClient,并完成对应服务提供者的requestMapping映射。
2,在启动类加上@EnableFeignClients(basePackages = {"com.yq.client"}), 我的serviceClieng位于com.yq.client包。

提供方的主要接口如下:


userSvc001.png

ServiceClient类的主要实现如下.
注意:User 类在两个服务中是一样,实际项目中我们可以把它放到公共依赖包中。

@FeignClient(value = "user-service", fallbackFactory = UserServiceFallbackFactory.class)
public interface UserServiceClient {
    
    @RequestMapping(value="/v1/users/{userId}", method= RequestMethod.GET, produces = "application/json;charset=UTF-8")
    public User getUser(@PathVariable(value = "userId") String userId);

    @RequestMapping(value="/v1/users/queryById", method= RequestMethod.GET, produces = "application/json;charset=UTF-8")
    public User getUserByQueryParam(@RequestParam("userId") String userId);

    @RequestMapping(value="/v1/users", method= RequestMethod.POST, produces = "application/json;charset=UTF-8")
    public String createUser();
}

完整代码看 user-servciefeignusercommodity-service,里面的pom文件,serviceClient都是完整的可以运行的。 欢迎加星,fork。

效果截图

第一张截图,两个服务都正常在consul上注册,完成服务间调用


consul001OK_FeignCall.png

第二张截图,两个服务都正常在consul上注册,完成服务间调用, 这是consul down了,服务间调用可以继续,因为feignusercommodity-service服务缓存了user-service服务的服务提供地址信息


consul002_shutdownConsul_CallOK.png

第三张截图,feignusercommodity-service服务正常在consul上注册,但是user-service没有注册,系统给出了“com.netflix.client.ClientException: Load balancer does not have available server for client: user-service”


consul003_userSvcOff.png

第四张截图,user-service提供方的对应方法报异常,服务调用能正常获取到该异常并显示。


consul004_svcCallOriginalSvcException.png
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,247评论 19 139
  • 大纲 注册中心功能服务one功能服务two 整体目录结构如下整体目录结构这里整个功能是一个maven项目,注册中心...
    一名程序猿阅读 5,192评论 0 4
  • 目录 一、SpringCloud微服务技术简介 1.1 微服务的功能主要体现在以下儿个方面。 1.2 微服务具有以...
    程序大视界阅读 8,617评论 0 1
  • 微服务架构模式的核心在于如何识别服务的边界,设计出合理的微服务。但如果要将微服务架构运用到生产项目上,并且能够发挥...
    java菜阅读 8,048评论 0 6
  • 糯米糖藕,江南风味,健康美味,香,甜,柔,糯。不添加防腐剂,每袋550克一650克,常温保存,开袋后加热食用。 藕...
    晓松苗阅读 2,555评论 0 0

友情链接更多精彩内容