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

上一篇集成了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,实际生产环境中,使用远不止这么简单,这就需要我们慢慢去摸索了...

14f8e427a214303d0880a9c06e7f7e67.png
778e11f215a10470aaa26c61f46bfd80.png
f856832f08a7345e20b5de192cc6e599.png

最后

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/567719.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python中赋值,深拷贝和浅拷贝

1python变量 变量的存储,采用了引用语义的方式,存储的只是一个变量的值所在的内存地址,而不是这个变量的值本身。 2赋值 python变量赋值实际上是对象的引用。 如: list_a [1,2,3,"hello",["python",&qu…

excel进度条与百分比不符_Excel项目管理模板V2.0

Excel表哥公众号推送的第一篇文章 如何用Excel制作一个高逼格的项目管理模板 累积获得了超多的下载量。下面是和读者朋友的一些交流互动:在使用过程中大家陆续也反馈了一些问题和建议。因此我们推出了项目管理模板V2.0 升级版!算作是给读者朋友们的一个答…

python 格式化输出%和format

1 %用法 1.1整数的输出 %o —— oct 八进制 %d —— dec 十进制 %x —— hex 十六进制 print(%o % 20) #24 print(%d % 20) #20 print(%x % 20) #141.2浮点数输出 %f ——默认保留小数点后面六位有效数字   %.3f,保留3位小数位 %e ——默认保留小数点后面六…

linux系统中安装python_2. Linux 下安装python

Linux 各个版本的系统都自带python解释器,可以在shell界面输入 python 就能进入交互界面,并显示python版本信息; 现在最流行的版本是python2.7,Centos6 默认安装2.6.6的版本,Centos7 默认安装2.7.* 的版本。 如果Cento…

访问修饰符作用范围由大到小是_9个java基础小知识

一、面向对象和面向过程的区别1. 面向过程 : 面向过程性能比面向对象高。因为类调用时需要实例化,开销比较大,比较消耗资源,所以当性能是最重要的考虑因素时(例如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发…

白盒测试用例设计方法(语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖、路径覆盖、基本路径覆盖)

语句覆盖:每条语句至少执行一次。 判定覆盖:每个判定的所有可能结果至少出现一次。(又称“分支覆盖”) 条件覆盖:每个条件的所有可能结果至少执行一次。 判定/条件覆盖:一个判定中的每个条件的所有可能结果…

Python之列表和元组

01 序列 成员有序排列的,且可以通过下标偏移量访问到它的一个或者几个成员,这类类型统称为序列 序列数据类型包括:字符串,列表,和元组类型。 特点: 都支持下面的特性 索引与切片操作符 成员关系操作符(in , not in) 连接操作符() & 重复操作符(*) 0…

webgl编程指南源码_ThreeJS 源码剖析之 Renderer(一)

引子?最近,忽然想起曾在 WebGL 基础系列 文章中立下 flag:“后续还打算出 《ThreeJS 源码剖析》 系列”(特意翻出原话?),项目忙了一阵后,便决定开始写此系列,更新周期不固定,毕竟项目排期“天晓得”。此系…

python之集合与字典

01 一山不容二虎的集合 1.通俗来说,集合(set)是一个无序的不重复元素序列,就是一个用来存放数据的容器。 1)集合里面的元素是不可重复的: 如: s {1,2,3,4,1,2,3} print(s,type(s)) # 输出结…

opencv roberts算子_边缘检测 Roberts算子

Roberts算子是一种最简单的算子,利用局部差分算子寻找边缘的算子。采用对角线相邻两像素之差近似梯度幅值检测边缘。。检测垂直边缘的效果比斜向边缘要好,定位精度高,对噪声比较敏感,无法抑制噪声的影响。Roberts边缘算子是一个2x…

74ls90设计十进制计数器电路图_PLC控制系统的设计与调试步骤你知多少?

作为电气工程技术人员我们在平时工作中常常要对PLC控制系统进行设计与调试,下面给各位朋友分享一下PLC控制系统的设计与调试步骤。PLC控制系统的设计与调试过程是这样的;第一点需要我们深入了解被控制系统。我们在设计前应该熟悉图样资料,并深…

python硬件_「大神器!」硬件的AI性能测试Python库发布

目前人工智能技术发展速度很快,也很吸引眼球。但是对于各种多如牛毛的方法,目前并米有一个可靠的精准的基准来衡量各项硬件在不同算法训练和推理的性能。现在,不用愁了。国外的一个哥们, Andrey Ignatov发布了一个python库。大家可…

python之异常处理

关于错误和异常 (1)概念:错误是无法通过其他代码进行处理问题,如语法错误和逻辑错误,语法错误是单词或格式等写错,只能根据系统提示去修改相应的代码,逻辑错误是代码实现功能的逻辑有问题&…

什么是python标识符_Python:标识符Identifier

什么是标识符? 标识符 (ldentifier) :是一个用来标识变量、函数、类、模块或其他对象的名称。 标识符规范 1)标识符由字母、下划线和数字组成 2)不能以数字开头 3)区分大小写 4)不能使用关键字 命名规则 1、见名知意。…

springboot security 权限校验_十二、SpringBoot 优雅的集成Spring Security

前言至于什么是Spring security ,主要两个作用,用户认证和授权。即我们常说的,用户只有登录了才能进行其他操作,没有登录的话就重定向到登录界面。有的用户有权限执行某一操作,而有的用户不能执行则是授权。算是一个项…

python-week5

1、现在有如下流程:A->B->C->D->E->F,要求根据输入的参数从制定的流程执行下去 """ File: 01流程执行.py Author: chde_wang Date: 2020-08-16 18:51:35 Description:将输入存储到列表中&#xf…

excel学习1-查看一列数值是否在另一列中存在

出现次数用COUNTIF 是否出现使用 IFCOUNTIF 加入$的作用是将需要比对的列固定范围。写好一个函数后,使用右下角号,直接下拉就可以。 参考自https://blog.csdn.net/gywtzh0889/article/details/72910377

fx5u以太网通讯设置_操作示例 | 实现S7300和FX5U的数据交换

北辰BCNet-S7300Plus(以下简称BCNet),在BCNet-S7300的基础上,以太网口增加了支持与西门子带网口PLC(S7-200SMART 、S7-1200、S7-1500、S7300PN)之间的通讯功能。这些通讯功能包括基于S7TCP协议的数据交换、ModbusTCP服务器功能、ModbusTCP客户机功能&…

excel基础-固定某一列的输入内容

Office:需要固定的单元格-点击数据-数据有效性-点击,选择有效性条件 允许为:序列,然后需要下拉框内容,并选择下拉框。即可 切记:开源中的逗号为英文逗号。 最后效果如下: 参考自https://jingya…

为什么多个线程不可能同时抢到一把锁_HFL Redis_12_redis分布式锁的3种实现方式...

HotFrameLearning(简称 HFL) Redis_12_redis分布式锁的3种实现方式-一、大致介绍1、昨天介绍完redis的数据结构后,有小伙伴让本人讲讲redis的分布式锁,因此才有了此篇的由来,只是把我的节奏提前了而已;2、接下来我就通过几种方式介…