Feign客户端的重构,新建springcloud架构
1,在上篇博文中,已经实现了feign 客户端来远程调用接口的功能,因为feign 客户端在springcloud 开发过程中是比较常用的方式
https://www.cnblogs.com/pickKnow/p/11385656.html
2,上一篇博文中的架构,比较简单,直接使用feign 客户端没有重构的话,代码比较冗余。例如,member 服务中调用FeignMember 中的 getOrder 接口,FeignOrder 中的接口的具体实现在order 服务中的getOrder 中来实现
这样的代码比较冗余,如果有很多方法,就得写好多的接口。。。
@FeignClient(name = "app-aiyuesheng-order")
public interface OrderFeign { @RequestMapping("/getOrder")
public String getOrder();
。。。。
。。。。
如果有好多接口,这边得写很多,代码很冗余
}
3,springcloud 项目中,重构feign 客户端
项目的最终的目录结构

-----eureka: 单独的项目,eureka 注册中心
-----springcloud-parents: 父项目,里面是共同的依赖,maven project 的打包类型选择pom
----------springcloud-api-service :子moduel.也是pom 类型,api 接口,没有实现
---------------springcloud-api-member-service: 子module:jar 类型,具体的member 的接口
---------------springcloud-api-order-service: 子module:jar 类型,具体的order 的接口
----------springcloud-api-member-impl-service: 子module,jar 类型,member api 的具体实现
----------springcloud-api-order-impl-service: 子module,jar 类型,order api 的具体实现
第一步:
springcloud-parents:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent>
<!-- 管理依赖 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.M7</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- SpringBoot整合Web组件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- SpringBoot整合eureka客户端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- SpringBoot整合fegnin客户端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency> </dependencies>
<!-- 注意: 这里必须要添加, 否者各种依赖有问题 -->
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/libs-milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
第二步:
springcloud-api-order-service: order 服务的api 接口, @RequestMapping("/getOrder") 是为了Feign 客户端来调用
public interface IOrderService {
@RequestMapping("/getOrder")
public Order getOrder(String orderId);
}
第三步:
springcloud-api-order-impl-service: order 服务的api 接口的具体实现,因为在不同的项目里面,所以要在maven里面把springcloud-api-order-service 的依赖加进去
<!--把order的接口引入过来 -->
<dependencies>
<dependency>
<groupId>com.aiyuesheng</groupId>
<artifactId>springcloud-api-order-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
开始写接口的实现:
@RestController
public class OrderServiceImpl implements IOrderService { @RequestMapping("/getOrder")
public Order getOrder(String orderId) {
Order order = new Order();
order.setOrderId(orderId);
order.setOrderName("订单名称");
return order;
} }
第四步:在springcloud-api-member-impl-service 里面开始掉用order 服务,使用feign 客户端,
创建了 OrderServiceFeign,指定需要调用的服务名称
@RestController
public class MemberServiceImpl { @Autowired
private OrderServiceFeign orderServiceFeign;
//通过feign 客户端来实现远程调用
@RequestMapping("/getOrder")
public Order getOrder(String orderId){
Order order = orderServiceFeign.getOrder(orderId);
return order;
} }
指定了调用的服务别名:app-aiyuesheng-order
@FeignClient(value = "app-aiyuesheng-order")
public interface OrderServiceFeign extends IOrderService { }
同时继承了IOrderService,相当于这部分代码不用写了,写出来就是冗余的代码
@RequestMapping("/getOrder")
public Order getOrder(String orderId);
但是需要在maven 里面加入依赖:
<dependencies>
<dependency>
<groupId>com.aiyuesheng</groupId>
<artifactId>springcloud-api-order-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
这样,就完成了代码的重构,以及用Feign 客户端实现远程调用
主要Feign 客户端是默认支持Ribbon 客户端负载均衡器的,所以,当服务集群的时候,也能够轮询式的访问
如果使用Feign 客户端远程调用接口的时间过长怎么处理呢?可以加入超时时间的配置:
###设置feign客户端超时时间
ribbon:
###指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间。
ReadTimeout: 5000
###指的是建立连接后从服务器读取到可用资源所用的时间。
ConnectTimeout: 5000
Feign客户端的重构,新建springcloud架构的更多相关文章
- Springcloud 整合Hystrix 断路器,支持Feign客户端调用
1,在这篇博文中,已经大致说过了Springcloud服务保护框架 Hystrix在服务隔离,服务降级,以及服务熔断中的使用 https://www.cnblogs.com/pickKnow/p/11 ...
- Spring Cloud之Feign客户端调用工具
feign介绍 Feign客户端是一个web声明式http远程调用工具,提供了接口和注解方式进行调用. Spring Cloud 支持 RestTemplate Fetin Feign客户端实际开发 ...
- Spring Boot使用Feign客户端调用远程服务时出现:timed-out and no fallback available,failed and no fallback available的问题解决
timed-out and no fallback available: 这个错误基本是出现在Hystrix熔断器,熔断器的作用是判断该服务能不能通,如果通了就不管了,调用在指定时间内超时时,就会通过 ...
- Feign客户端实现RPC 调用
1,springcloud 中支持http调用的两种方式,RestTemplate,Feign客户端 2,Feign 客户端是一个声明式(注解方式)http 远程调用工具 3,实现方式如下: 第一步: ...
- 《重构网络-SDN架构与实现》阅读随笔
<重构网络-SDN架构与实现>: SDNLAB <重构网络-SDN架构与实现>新书有奖试读活动 资源下载 随笔 有幸拜读了李呈前辈和杨泽卫杨老师的作品<重构网络-SDN架 ...
- Spring Cloud之Feign客户端超时时间配置
关于雪崩效应: 默认情况下tomcat只有一个线程去处理客户端发送的所有请求.高并发情况下,如果客户端请求都在同一接口,tomcat的所有线程池去处理,导致其他接口服务访问不了,等待. Tomcat有 ...
- Feign 客户端调用错误
1.@RequestBody 必须要写在实现接口中 2.Feign 客户端调用的时候如果有参数的话,默认是发送post请求 3.服务接口中的请求参数必须要加上@RequestParam("r ...
- Feign 客户端的使用 二
一.Feign的使用(客户端调用 json/xml格式的接口) 1.服务端接口编写 <parent> <groupId>org.springframework.boot< ...
- Android重构篇——项目架构篇
版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请表明出处:http://www.cnblogs.com/cavalier-/p/6823777.html 前言 大家好,我是Cavalier ...
随机推荐
- 8421BCD转余3码Verilog HDL的设计(1)
近期阅读Verilog HDL高级数字设计(第二版)中,遇到了串行比特流BCD码转余3码转换器的设计,比较独特的是: (1)该转换器的输入为1位串行比特流,输出也为1位串行比特流. BCD码与余三码的 ...
- 盒马微信小程序
盒马app刚出现,就吸足了眼球.最近看了看盒马界面,很Q,就想着仿照app写个小程序. 功能介绍 好奇微信小程序是如何制作的,也对盒马app感兴趣,就尝试写了这个盒马小程序.实现了app的部分功能,还 ...
- 神奇的 SQL 之 ICP → 索引条件下推
开心一刻 楼主:来,我们先排练一遍 小伙伴们:好 嘿.哈.嚯 楼主:非常好,就是这个节奏,我们开始吧 楼主:啊.啊.啊,疼 ! 你们是不是故意的 ? 回表与覆盖索引 正式讲 ICP 之前了,我们先将相 ...
- Windows SMBv3 CVE-2020-0796漏洞
今天,Microsoft不小心泄露了有关新产品的信息 蠕虫的 Microsoft服务器消息块(SMB)协议中的漏洞(CVE-2020-0796). 今天,Microsoft不小心泄露了有关安全更新的信 ...
- OpenGL 实现视频编辑中的转场效果
转场介绍 转场效果是什么? 转场效果,简单来说就是两段视频之间的衔接过渡效果. 现在拍摄 vlog 的玩家越来越多,要是视频没有一两个炫酷的转场效果,都不好意思拿出来炫酷了. 那么如何在视频编辑软件中 ...
- PHP把图片存入数据库(非路径)【待测试】
大部分人的图片上传都是保存一个路径到数据库,这样在插入时确实快,也符合web的特点,但是在删除时就很麻烦,需要找到文件并删除,该代码能够把代码直接存入数据库,删除时一并删除.请注意:这样的话数据库大小 ...
- Redis主从原理及哨兵模式
1.Redis主从搭建 主从的搭建很简单,主节点设置连接密码,从节点的配置上主节点的ip和端口,以及密码,一般从节点我们都设置只读模式. 主节点配置: 主节点密码: requirepass xxx 从 ...
- C++类的详解
目录 一.类成员的访问权限 二.成员变量的命名 三.构造函数 四.析构函数 五.C++程序也很优雅 六.类的其它知识 七.可变参数 八.课后作业 九.版权声明 超女选秀的例子我们玩了很久,为了学习的需 ...
- [转] SQL Server 数据库性能优化
分析比较执行时间计划读取情况 1. 查看执行时间和cpu set statistics time on select * from Bus_DevHistoryData set statistics ...
- Netty源码分析之ChannelPipeline—出站事件的传播
上篇文章中我们梳理了ChannelPipeline中入站事件的传播,这篇文章中我们看下出站事件的传播,也就是ChannelOutboundHandler接口的实现. 1.出站事件的传播示例 我们对上篇 ...