《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微服务基础单点系统架构传统项目架构传统项目分为三层架构,将业务逻辑层.数据库访问层.控制层放入在一 ...
随机推荐
- Linux使用Mysql数据库
启动MySQL: service mysqld start 或者使用如下命令: /etc/init.d/mysqld start 重新启动MySQL: service mysqld restart 或 ...
- 解决方案 | vbnet的msgbox 窗口最前置,topmost属性设置
For that you can use the TopMost Property of MsgBox (Number 262144) MsgBox("Hello there", ...
- Pybind11和CMake构建python扩展模块环境搭建
使用pybind11的CMake模板来创建拓展环境搭建 从Github上下载cmake_example的模板,切换分支,并升级pybind11子模块到最新版本 拉取pybind11使用cmake构建工 ...
- C# Expression详解(高级)
LINQ在本地查询IEnumerbale主要是用委托来作为传参,而解析型查询IQueryable则用Expression来作为传参: public static IEnumerable<T> ...
- 靶机: Chronos
靶机: Chronos 准备 靶机:https://www.vulnhub.com/entry/chronos-1,735/ 使用 VirtualBox 网络 Host-Only 配置网络环境:htt ...
- XXL-JOB初见
XXL-JOB是轻量级分布式任务调度平台 port:8088 初始账号:admin/123456 主要有调度中心.执行器.任务 执行流程: 1.执行器向调度中心上报任务 2.调度中心为执行器分配任务 ...
- keycloak~为微信二维码添加动态kc认可的动态state
本实例将通过keycloak社区登录实现微信二维码的登录,并且二微码不是keycloak动态生成,而是通过微信提供的js生成的,在页面上直接输出的方式实现的. 动态state 在Keycloak中使用 ...
- 深度学习的始祖框架,grandfather级别的框架 —— Theano —— 示例代码学习(5)
代码1:(求雅可比矩阵, jacobian矩阵求解) import theano from theano import tensor # Creating a vector x = tensor.dv ...
- 如何安装废弃版本的Jax —— pypi服务器上不保存的python包应该如何安装
python的公开扩展包的存储是在网站: http://pypi.org/ 一般情况下,这是没有问题的,但是对于一些更新版本比较多的扩展包就出现了问题,因为pypi的服务器对每个项目(扩展包)都是由存 ...
- 记一次 .NET某环境监测系统 崩溃分析
一:背景 1. 讲故事 前些天有位朋友找到我,说他们的程序崩溃了,也自己分析了下初步结果,让我帮忙再确认下,既然让我确认,那就开始dump分析之旅吧. 二:WinDbg 分析 1. 为什么会崩溃 wi ...