上一篇集成了ZuulGateway和Eureka并进行了测试。在实际场景中,我们肯定会有很多的微服务,而他们之间可能会存在相互调用的关系,那么,如何优雅的处理服务之间的调用问题呢?接下来就是我们要解决的。

简单的说下Feign

Feign 是一个声明式REST Web服务客户端,可以处理微服务间的Web服务调用。他是使用注解加接口的形式形成去调用服务的,相对来说不是很难,有兴趣可去官方地址了解下。这里不多介绍。

如何用

这里我们还是基于之前的Spring cloud demo去改造,老规矩先附上源码地址spring cloud demo

步骤

  1. 这里Consumer与Provider分别代表两个微服务,测试时,使用Controller通过Feign调用Provider。调用流程如下: 网关zuul -> consumer -> provider

1,引入依赖

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

2.在Consumer的启动类上增加注解,开启Feign的支持

@EnableFeignClients

3.在Consumer新增Controller以供测试时调用

package cn.kxtop.blog.consumer.controller; import cn.kxtop.blog.consumer.client.ProviderClient; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @Slf4j @RestController @RequestMapping("/feign") public class TestFeignController {     @Autowired     private ProviderClient providerClient;     @GetMapping     public String get() {         log.info("consumer feign get action");         return providerClient.get();     }     @PostMapping     public String post() {         log.info("consumer feign post action");         return providerClient.post();     } }

4.在Consumer定义Feingn接口

 package cn.kxtop.blog.consumer.client; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @FeignClient(name = "kxtop-provider", path = "/api/test-feign") public interface ProviderClient {     @GetMapping("/")     String get();     @PostMapping("/")     String post(); }

5.在Provider中新增REST接口,这里主要用于测试,供Consumer调用

package cn.kxtop.blog.provider.controller; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @Slf4j @RestController @RequestMapping("/test-feign") public class TestFeignController {     @GetMapping     public String get() {         log.info("provider feign get action");         return "test feign get";     }     @PostMapping     public String post() {         log.info("provider feign post action");         return "test feign post";     } }

6.使用Postman请求Consumer测试

观察得知,Postman请求到网关之后分发到consumer微服务,微服务通过Feign接口调用Provider微服务并接收到返回值,之后原路返回到Consumer。当然,这里只是简单的演示下如何使用Feign,实际生产环境中,使用远不止这么简单,这就需要我们慢慢去摸索了...

最后

到这里,我们的基本框架已经搭建完成,我们用SpringCloud集成了网关(Zuul),还加入了服务发现与注册(Eureka),也演示了微服务间的调用并集成了Feign。

那么基于以上,我们会发现还是会有些场景没有解决。比如,我的配置都在properties里面,参数都是写死的,到线上后怎样在不重启服务的情况下修改参数?怎样进行灰度发布或金丝雀测试?还有我们的微服务已经通过Feign可以相互调用了,那我怎样监测他们的运行情况?如果出故障时,如何快速的知道并修复?数据量太大,一台扛不住又该如何?在SpringCloud中又如何处理分库分表读写分离?

springcloud feign 服务调用其他服务_微服务实战——SpringCloud与Feign集成相关推荐

  1. java测试案例_微服务实战测试之Java实例篇

    测试分为好多种类型 测试用例的组织 单元测试 集成测试 端到端测试 消费者测试 契约测试 这是著名的测试金字塔, 也叫测试冰淇淋, 意谓我们应该从下到上地组织编写我们的测试, 大量地单元测试覆盖80% ...

  2. 分布式与微服务——Iaas,Paas和Saas、单体应用和缺点、微服务概念、传统 分布式 SOA 架构与微服务架构的区别、微服务实战、什么是RPC、CAP定理和BASE理论、唯一ID生成、实现分布式

    文章目录 1-什么是Iaas,Paas和Saas 一 IaaS基础设施服务 二 paas平台即服务 三saas软件即服务 四 总结 2-单体应用和缺点 一 单体应用 二 单体应用的缺陷 3-微服务概念 ...

  3. SpringCloud Alibaba 2021微服务实战三十二 集成RocketMQ实现分布式事务

    目录 基于RocketMQ分布式事务 - 完整示例 2.解决方案 2.1.本地消息表方案 2.2.RocketMQ事务消息方案 一.事务消息 二.订单服务 1.事务日志表 2.TransactionM ...

  4. drools动态配置规则_微服务实战系列(八)-网关springcloud gateway自定义规则

    1. 场景描述 先说明下项目中使用的网关是:springcloud gateway, 因需要给各个网关服务系统提供自定义配置路由规则,实时生效,不用重启网关(重启风险大),目前已实现:动态加载自定义路 ...

  5. eureka多台注册中心_微服务实战系列(五)-注册中心Eureka与nacos区别

    1. 场景描述 nacos最近用的比较多,介绍下nacos及部署吧,刚看了下以前写过类似的,不过没写如何部署及与eureka区别,只展示了效果,补补吧. 2.解决方案 2.1 nacos与eureka ...

  6. spring boot和spring cloud的区别_微服务实战系列(三)-cloud、boot及maven关系

    1 . 问题描述 随着springboot.springcloud的不断迭代升级,开发效率不断提升,越来越多的开发团队加入到spring的大军中,今天用通俗的语言,介绍下什么是springboot,s ...

  7. 微服务实战系列之SpringCloud Alibaba学习(四)

    微服务实战系列之SpringCloud Alibaba: 微服务实战系列之SpringCloud Alibaba学习(一) 微服务实战系列之SpringCloud Alibaba学习(二) 微服务实战 ...

  8. SpringCloud Alibaba微服务实战(三) - Nacos服务创建消费者(Feign)

    什么是Feign Feign 是一个声明式的伪 Http 客户端,它使得写 Http 客户端变得更简单.使用 Feign,只需要创建一个接口并注解.它具有可插拔的注解特性,可使用 Feign 注解和 ...

  9. SpringCloud Alibaba微服务实战三 - 服务调用

    SpringCloud Alibaba微服务实战三 - 服务调用 通过前面两篇文章我们准备好了微服务的基础环境并运行注册服务到nacos上了 统一接口返回结构 在开始今天的正餐之前我们先把上篇文章中那 ...

最新文章

  1. 在世界第二届半机械人奥运会上,瘫痪飞行员在Cybathlon BCI竞赛中争夺金牌
  2. SDN/NFV 网络技术系列文章
  3. [BTS06]BizTalk2006 SDK阅读笔记(九) 业务活动监控
  4. krylov子空间迭代法
  5. html5中有哪些新属性,整理HTML5中表单的常用属性及新属性
  6. android sharedpre,Android SharedPreferences四种操作模式使用详解_Android_脚本之家
  7. InfoVista.NET 内部数据格式简介
  8. TTYL的完整形式是什么?
  9. mysql rr和rc_MySQL Transaction--RC和RR区别
  10. 神牛驾到!James B. Orlin 的 O(nm)最大流算法论文翻译!!
  11. 浅谈GRADS气象绘图软件的使用
  12. 华为usg6000配置手册_三国志11手机版,问题解决手册 1.4.4版本
  13. 【一款好用的安卓投屏软件Androidscreen】
  14. 太可怕了!人工智能逐渐取代客服?原因竟然是这个
  15. chrome 谷歌 浏览器 更新后页面布局变大处理
  16. 猫哥教你写爬虫 031--爬虫基础-html
  17. 今天的Java笔试题
  18. ajaxtoolkit
  19. 在10万以内的一个整数,它加上 100 后是一个完全平方数,再加上 168 又是一个完全平方数,请问该数是多少?
  20. smali语法添加弹窗

热门文章

  1. springboot整合mybatisplus中@Mapper与@MapperScan的使用
  2. Bugzilla 使用指南
  3. boost互斥锁_boost锁使用总结
  4. 固定 顶部_优质的阳光板温室的顶部应该如此安装,专业的人做专业的事
  5. vue 调用webservice_js跨域调用WebService的简单实例
  6. 扫地机器人电路原理图_扫地机有这一台就够了:石头扫地机器人T6 首拆
  7. chimerge算法matlab实现,有监督的卡方分箱算法
  8. python闪光培训班 费用-Python tk 按钮颜色
  9. java中的action是指什么_Struts2【开发Action】知识要点
  10. 百度-Java中级面试题分享-