上一节我们使用了Ribbon(基于Http/Tcp)进行微服务的调用,Ribbon的调用比较简单,通过Ribbon组件对请求的服务进行拦截,通过Eureka Server 获取到服务实例的IP:Port,然后再去调用API。本节课我们使用更简单的方式来实现,使用声明式的Web服务客户端Feign,我们只需要使用Feign来声明接口,利用注解来进行配置就可以使用了,是不是很简单?实际工作中,我们也只会用到Feign来进行服务之间的调用(大多数)。接下来,我们来实例操作一把。

为了代码的重用性,我们来创建一个新的project mscx-ad-feign-sdk作为Feign的服务调用工具。

创建项目mscx-ad-feign-sdk

三部曲之Step 1(加依赖)

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

mscx-ad

com.sxzhongf

1.0-SNAPSHOT

4.0.0

jar

mscx-ad-feign-sdk

只定义微服务Feign调用用到的请求对象和响应对象,而不涉及具体的实现类。

com.sxzhongf

mscx-ad-feign-sdk

1.0-SNAPSHOT

org.springframework.boot

spring-boot-starter-web

org.springframework.cloud

spring-cloud-starter-openfeign

com.sxzhongf

mscx-ad-common

1.0-SNAPSHOT

org.springframework.cloud

spring-cloud-starter-hystrix

1.2.7.RELEASE

org.springframework.boot

spring-boot-maven-plugin

三部曲之Step 2(加注解@EnableFeignClients,添加在具体的微服务中,使用我们自定义的FeignClient)

/**

* ISponsorFeignClient for service using

*

* @author Isaac.Zhang | 若初

*/

@FeignClient(value = "mscx-ad-sponsor", fallback = SponsorClientHystrix.class)

public interface ISponsorFeignClient {

@RequestMapping(value = "/ad-sponsor/plan/get", method = RequestMethod.POST)

CommonResponse> getAdPlansUseFeign(@RequestBody AdPlanGetRequestVO requestVO);

@RequestMapping(value = "/ad-sponsor/user/get", method = RequestMethod.GET)

/**

* Feign 埋坑之 如果是Get请求,必须在所有参数前添加{@link RequestParam},不能使用{@link Param}

* 会被自动转发为POST请求。

*/

CommonResponse getUsers(@RequestParam(value = "username") String username);

}

@GetMapping(path = "/user/get")

public CommonResponse getUsers(@Param(value = "username") String username) {

log.info("ad-search::getUsersFeign -> {}", JSON.toJSONString(username));

CommonResponse commonResponse = sponsorFeignClient.getUsers(username);

return commonResponse;

}

}

三部曲之Step 3(加配置,工具类库不需要,添加在具体的微服务中)

我们上面的实例中有一个问题,如果说我们的广告提供服务出现了问题,那么我们通过使用FeignClient 调用的APIsponsorFeignClient.getUsers(username);就会报错,如果长时间报错,会引起大规模的服务错误问题,也就有是我们常说的服务雪崩效应,我们要怎样避免一个服务出错而拖垮整个系统的问题呢?这里我们需要引入一个组件Hystrix来处理服务错误。

三部曲之Step1(加依赖)

从上图我们可以看到,我们引入Feign依赖的时候,它本身已经依赖了Hystrix,根据Maven依赖的传递性,我们可以知道我们自己的服务已经包含了Hystrix的依赖支持,我们可以直接使用了~

三部曲之Step2(加注解) @EnableHystrix // 开启hystrix 断路器

三部曲之Step3(改配置)

feign:

hystrix:

enabled: true

使用Hystrix来配置Feign实现调用容错

@Component

public class SponsorClientHystrix implements ISponsorFeignClient {

@Override

public CommonResponse> getAdPlansUseFeign(AdPlanGetRequestVO requestVO) {

return new CommonResponse<>(-1, "mscx-ad-sponsor feign & hystrix get plan error.");

}

@Override

public CommonResponse getUsers(String username) {

return new CommonResponse<>(-1, "mscx-ad-sponsor feign & hystrix get user error.");

}

}

在ISponsorFeignClient类中,添加出错处理类(fallback)

@FeignClient(value = "mscx-ad-sponsor", fallback = SponsorClientHystrix.class)

public interface ISponsorFeignClient {

...

在SponsorClientHystrix中,我们要特别注意2点

该类必须添加@Component注解,以便可以加入Spring 容器中

该类需要实现ISponsorFeignClientFeign的客户端接口

通过上面的实现,我们的服务在调用过程中,如果发生错误,就会进行服务降级,调用到出错应该调用的默认处理类中的方法,也就实现了我们想要做的短路处理来保护我们的当前服务。

微服务feignclient_[Spring cloud 一步步实现广告系统] 11. 使用Feign实现微服务调用相关推荐

  1. [Spring cloud 一步步实现广告系统] 11. 使用Feign实现微服务调用

    上一节我们使用了Ribbon(基于Http/Tcp)进行微服务的调用,Ribbon的调用比较简单,通过Ribbon组件对请求的服务进行拦截,通过Eureka Server 获取到服务实例的IP:Por ...

  2. feign响应拦截_[Spring cloud 一步步实现广告系统] 11. 使用Feign实现微服务调用

    上一节我们使用了Ribbon(基于Http/Tcp)进行微服务的调用,Ribbon的调用比较简单,通过Ribbon组件对请求的服务进行拦截,通过Eureka Server 获取到服务实例的IP:Por ...

  3. [Spring cloud 一步步实现广告系统] 10. 使用Ribbon 实现微服务调用

    在使用Ribbon调用广告投放系统API之前,我们需要先创建2个VO对象,AdPlanVO,AdPlanGetRequestVO. //数据请求对象 @Data @NoArgsConstructor ...

  4. [Spring cloud 一步步实现广告系统] 13. 索引服务编码实现

    上一节我们分析了广告索引的维护有2种,全量索引加载和增量索引维护.因为广告检索是广告系统中最为重要的环节,大家一定要认真理解我们索引设计的思路,接下来我们来编码实现索引维护功能. 我们来定义一个接口, ...

  5. [Spring cloud 一步步实现广告系统] 22. 广告系统回顾总结

    到目前为止,我们整个初级广告检索系统就初步开发完成了,我们来整体回顾一下我们的广告系统. 整个广告系统编码结构如下: 1.mscx-ad 父模块 主要是为了方便我们项目的统一管理 2.mscx-ad- ...

  6. [Spring cloud 一步步实现广告系统] 21. 系统错误汇总

    广告系统学习过程中问题答疑 博客园 Eureka集群启动报错 Answer 因为Eureka在集群启动过程中,会连接集群中其他的机器进行数据同步,在这个过程中,如果别的服务还没有启动完成,就会出现Co ...

  7. [Spring cloud 一步步实现广告系统] 19. 监控Hystrix Dashboard

    在之前的18次文章中,我们实现了广告系统的广告投放,广告检索业务功能,中间使用到了 服务发现Eureka,服务调用Feign,网关路由Zuul以及错误熔断Hystrix等Spring Cloud组件. ...

  8. [Spring cloud 一步步实现广告系统] 12. 广告索引介绍

    索引设计介绍 在我们广告系统中,为了我们能更快的拿到我们想要的广告数据,我们需要对广告数据添加类似于数据库index一样的索引结构,分两大类:正向索引和倒排索引. 正向索引 通过唯一键/主键生成与对象 ...

  9. [Spring cloud 一步步实现广告系统] 9. 主类和配置文件

    搜索系统启动主类 /*** AdSearchApplication for 广告搜索服务启动类** @author <a href="mailto:magicianisaac@gmai ...

最新文章

  1. 雀姬 服务器维护,《雀姬》功能界面介绍(多图)
  2. linux搭建--centos使用qemu-kvm,libvirt搭建虚拟机,并搭建libvmi来虚拟机自省(四)
  3. c监控进程发现未启动就启动进程_非常有用的16个Linux 服务器监控命令
  4. 廖雪峰python教程整理笔记_廖雪峰python教程笔记(一)
  5. 两年前,梦开始的地方.
  6. Sybase ASE15.7静默安装
  7. 关于回车自动跳转的问题,能不能有选择的跳转??
  8. 哇哦!《Java核心技术》都更到12版了,牛逼!
  9. access里面的表达式运用_Access表达式
  10. 隧道凿岩机器人传感器_隧道凿岩机器人钻臂液压控制系统的设计(精品)☆
  11. php ctype xdigit,PHP中的ctype_xdigit()函数
  12. 星际2 正在连接服务器,星际征霸游戏连接服务器失败怎么办 解决方案分享
  13. JavaScript中实现键值对的方法
  14. GBU406-ASEMI整流扁桥GBU406
  15. 基于spring cloud 免费搭建开源的企业知识库
  16. Trias发起的世界区块链黑客松,牛津启动会首秀成功!
  17. 手部姿态检测(按视频段)_v3(hcn)
  18. 在估值之前的“问题”以及什么是“格罗斯曼-斯蒂格利茨悖论”
  19. Ubuntu14.04安装sybylx1.1
  20. Naptime 【POJ - 2228】

热门文章

  1. python数据科学-数据预处理
  2. 如何生成 jMeter 结果分析统计图表
  3. 如何使用 Node.js 访问 SAP HANA Cloud 数据库里的数据
  4. Visual Studio Code 里针对 SAP Commerce Cloud Impex 文件的语法高亮扩展
  5. SAP S/4HANA Cloud SDK 入门介绍
  6. 关于有朋友询问,Spartacus,Fiori,SAP UI5这些术语的关系
  7. SAP Spartacus的Component 请求
  8. 使用Hybris commerce的promotion rule进行促销活动
  9. 如何在Hybris commerce里创建一个media对象
  10. SAP UI5 message.showMessageToast