《SpringCloud微服务之间相互调用》之Feign实战
一、场景再现
假设我们有这样一个场景:
用户付款成功后,扣除用户金额,还要减少仓库数量。按照微服务的设计理念,用户具有至少以下3个服务(项目):
1、订单
2、账户
3、仓库
微服务之间都是相互独立的服务,独立的项目,独立的数据库。每个服务都对外暴露的接口用于调用。按照传统的设计,我们
跨服务调用,可以用到tcp或者http,服务调用方,通过tcp_client或http_client通过url调用,将数据以流的方式传递就可以实现。
这种思想我们要能想到,但在现今时代,这样做未免不太优雅。重复造轮子不是一件高效的做法。因此我们可以秉承”开箱即用,避
免重复造轮子“的理念通过以下方式实现:
多个服务注册统一中心(nacos)
服务之间调用通过(feign)
负载均衡利用(feign自带的ribben)
顾名思义需要满足以下3点:
1、服务提供者与消费者都注册到同一nacos中心的同一group
2、服务提供者暴露接口
3、服务消费者集成服务器提供者暴露的接口,然后加上feign注解,并配置相关feign信息
二、实战
2.1、nacos注册
此处不做赘述,见我其他nacos注册文章
2.2、feign注册
2.2.1、pom.xml
<!--服务之间接口调用-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-服务提供者暴露的接口-->
<dependency>
<groupId>com.cbi.workflow</groupId>
<artifactId>cbi-workflow-api</artifactId>
<version>${cbi.workflow.version}</version>
</dependency>
2.2.2、application.yml
feign:
httpclient:
connection-timeout: 30000
enabled: false
okhttp:
enabled: true #同一个服务实例的重试次数(MaxAutoRetries)、不同服务实例(MaxAutoRetriesNextServer)的重试次数都设置为0,即可达到不重试的目的。
ribbon:
#http读取响应的超时时间
ReadTimeout: 30000
#http建立socket的超时时间
ConnectTimeout: 30000
#重试相同实例,同一台实例最大重试次数,包括首次调用
MaxAutoRetries: 0
#重试负载均衡其他的实例,最大重试2次,不包括首次的server
MaxAutoRetriesNextServer: 0
#重试所有操作,无论是请求超时或者socket read timeout都进行重试。一般都设置成false,慎用true,有幂等性隐患存在
OkToRetryOnAllOperations: false
management:
endpoints:
web:
exposure:
include: '*'
2.2.3、controller
//value就是nacos注册的服务名称,会被解析http://ip:port
//path就是服务提供者的统一全局拦截路径,也就是spplication中配置的"context-path: /workflow",如果没有就配置 "/"
@FeignClient(value = "workflow", path = "/workflow")
public interface ICommonOperateFlowable extends IWorkflowHandler {
}
解释:
1、IWorkflowHandler 为服务提供方暴露的接口
2、通过install 服务提供者
3、pom引入服务提供者
4、
2.2.4、IWorkflowHandler
public interface IWorkflowHandler {
/**
* 发起流程
*
* @param wfProcessExecBean
* @return
*/
@PostMapping("/startProcess")
ResponseBean startProcess(@RequestBody WfProcessExecBean wfProcessExecBean);
}
2.2.5、常见错误
无法识别的feign_client
此时检查配置,@FeignClient注解的名称是否和服务提供方一致,可以打开nacos看看服务名称
《SpringCloud微服务之间相互调用》之Feign实战的更多相关文章
- SpringCloud实战 | 第五篇:SpringCloud整合OpenFeign实现微服务之间的调用
一. 前言 微服务实战系列是基于开源微服务项目 有来商城youlai-mall 版本升级为背景来开展的,本篇则是讲述SpringCloud整合OpenFeign实现微服务之间的相互调用,有兴趣的朋友可 ...
- Java生鲜电商平台-SpringCloud微服务架构高并发参数优化实战
Java生鲜电商平台-SpringCloud微服务架构高并发参数优化实战 一.写在前面 在Java生鲜电商平台平台中相信不少朋友都在自己公司使用Spring Cloud框架来构建微服务架构,毕竟现在这 ...
- JHipster技术栈定制 - 基于UAA的微服务之间安全调用
本文通过代码实例演示如何通过UAA实现微服务之间的安全调用. uaa: 身份认证服务,同时也作为被调用的资源服务.服务端口9999. microservice1: 调用uaa的消费者服务,服务端口80 ...
- 微服务之间的调用(Ribbon与Feign)
来源:https://blog.csdn.net/jrn1012/article/details/77837658 使用Eureka作为服务注册中心,在服务启动后,各个微服务会将自己注册到Eureka ...
- SpringCloud微服务(02):Ribbon和Feign组件,实现服务调用的负载均衡
本文源码:GitHub·点这里 || GitEE·点这里 一.Ribbon简介 1.基本概念 Ribbon是一个客户端的负载均衡(Load Balancer,简称LB)器,它提供对大量的HTTP和TC ...
- spring cloud实战与思考(二) 微服务之间通过fiegn上传一组文件(上)
需求场景: 微服务之间调用接口一次性上传多个文件. 上传文件的同时附带其他参数. 多个文件能有效的区分开,以便进行不同处理. Spring cloud的微服务之间接口调用使用Feign.原装的Feig ...
- SpringCloud微服务基础 Eureka、Feign、Ribbon、Zuul、Hystrix、配置中心的基础使用
1.单点系统架构 传统项目架构 传统项目分为三层架构,将业务逻辑层.数据库访问层.控制层放入在一个项目中. 优点:适合于个人或者小团队开发,不适合大团队开发. 分布式项目架构 根据业务需求进行拆分成N ...
- springcloud微服务架构搭建
SpringCloud微服务框架搭建 一.微服务架构 1.1什么是分布式 不同模块部署在不同服务器上 作用:分布式解决网站高并发带来问题 1.2什么是集群 多台服务器部署相同应用构成一个集群 作用:通 ...
- SpringCloud微服务框架搭建
一.微服务架构 1.1什么是分布式 不同模块部署在不同服务器上 作用:分布式解决网站高并发带来问题 1.2什么是集群 多台服务器部署相同应用构成一个集群 作用:通过负载均衡设备共同对外提供服务 1.3 ...
- SpringCloud微服务基础学习
看了蚂蚁课堂的微服务学习,确实学习了不少关于微服务的知识,现在总结学习如下 : SpringCloud微服务基础单点系统架构传统项目架构传统项目分为三层架构,将业务逻辑层.数据库访问层.控制层放入在一 ...
随机推荐
- C# 线程与进程
一.前台线程与后台线程对象 为什么要用多线程? 1.让计算机"同时"做多件事情,节约时间. 2.多线程可以让一个程序"同时"处理多个事情. 3.后台运行程序,提 ...
- yb课堂 用户模块个人中心 《四十一》
Personal.vue <template> <div> <div class="container"> <div class=&quo ...
- 异构数据源数据同步 → 从源码分析 DataX 敏感信息的加解密
开心一刻 出门扔垃圾,看到一大爷摔地上了 过去问大爷:我账户余额 0.8,能扶你起来不 大爷往旁边挪了挪 跟我说到:孩子,快,你也躺下,这个来钱快! 我没理大爷,径直去扔了垃圾 然后飞速的躺在了大爷旁 ...
- 输入Javac提示不是内部或外部命令
先去百度搜索"jdk下载"下载最新版jdk,并安装,安装目录不用去更改,直接默认就好,下载完了之后,双击打开安装,jdk安装完成后,会接着安装jre包,(jre和jdk是配对的,不 ...
- Linux-makefile命令后面的-j4 -j8是什么意思?
其实是指在编译指定的文件时用多少个线程进行编程的意思~ 相关命令示例如下: make zImage -j8 make modules -j8 --------------------------- m ...
- oeasy教您玩转vim - 36 - # 插入字符
插入字符 回忆上节课内容 正则表达式 行头行尾 ^ 意味着行开头 $ 意味着行结尾 任意字符 . 代表任意字符 [a-z] 代表任意小写字母 字符数量 * 代表 0 到任意多个前字符 + 代表 1 ...
- AMD 驱动安装 error 192解决问题
AMD 驱动安装 error 192解决问题 环境:win10专业版.自动更新已禁止.硬件安装设置[是](window自动下载驱动) [以下环境均在安全模式下进行 (win+r msconfig,安全 ...
- 【FastDFS】环境搭建 01 跟踪器和存储节点
FastDFS:分布式文件系统 它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问题. 特别适合以文件为载体的在线服务,如相册网站.视频网 ...
- 始智AI —— https://wisemodel.cn/ —— 试用
清华大学的合资企业推出的服务: 始智AI -- https://wisemodel.cn/ 链接: 始智AI -- https://wisemodel.cn/ 和modelscope比相对简约,毕竟功 ...
- anaconda运行install命令报错:Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:997)'
运行命令: conda install mpi4py 报错: Retrieving notices: ...working... ERROR conda.notices.fetch:get_chann ...