我是靠谱客的博主 俊秀缘分,这篇文章主要介绍Spring Cloud feign实现服务间的调用,现在分享给大家,希望可以做个参考。

feign简介

Feign是一个http请求调用的轻量级框架,可以以java接口注解的方式调用http请求,而不用像java中通过封装HTTP请求报文的方式直接调用。Feign通过处理注解,将请求模板化,当实际调用的时候,传入参数,根据参数再应用到请求上,进而转化成真正的请求,这种请求相对而言比较直观。

服务间的调用

需求背景:eureka注册中心已经搭建好,现在有两个微服务之间想要进行通信,并且这两个微服务都已经在eureka中注册好了,也就是说fin服务想要调用mal服务中的接口,那该如何实现。

步骤(fin  调用  api的接口  调用  mal逻辑):
1、api的pom.xml添加依赖

复制代码
1
2
3
4
5
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>

2、fin启动类添加注解

复制代码
1
2
@EnableHystrix @EnableFeignClients

3、api添加接口及熔断类  mal添加逻辑

(1)api添加接口及熔断类

@FeignClient注解用于指定从哪个服务中调用功能,注意里面的名称与被调用的服务名称保持一致,并且不能包含下划线。
@GetMapping注解用于对被调用的微服务进行地址映射。

复制代码
1
2
3
4
5
6
@FeignClient(value = "ttie-provider-mal", fallback = SaleOrderFeignHystrix.class) public interface SaleOrderFeignApi { @GetMapping(value = "/api/mal/getSaleOrder") DataResp<SaleOrderVo> getSaleOrder(@RequestParam(value = "orderNo") String orderNo); }

在分布式系统中,每个服务都可能会调用很多其他服务,被调用的那些服务就是依赖服务,有的时候某些依赖服务出现故障也是很正常的。
Hystrix 可以让我们在分布式系统中对服务间的调用进行控制,加入一些调用延迟或者依赖故障的容错机制。
Hystrix 通过将依赖服务进行资源隔离,进而阻止某个依赖服务出现故障时在整个系统所有的依赖服务调用中进行蔓延;同时Hystrix 还提供故障时的 fallback 降级机制。
总而言之,Hystrix 通过这些方法帮助我们提升分布式系统的可用性和稳定性。

如果需要访问导致回退触发的原因,可以使用@FeignClient内的fallbackFactory属性。

复制代码
1
2
3
4
5
6
7
@Component public class SaleOrderFeignHystrix implements SaleOrderFeignApi { @Override public DataResp<SaleOrderVo> getSaleOrder(String orderNo) { return DataResp.fail(ErrorCodeEnum.E000002, "商品订单"); } }

当api调用mal失败或超时时,就会返回错误信息;熔断配置默认为关闭,如果使用需要启动;

修改mal的application.yml文件,enabled: true

复制代码
1
2
3
4
5
6
7
8
feign: client: config: default: connect-timeout: 5000 read-timeout: 15000 hystrix: enabled: true

(2) mal添加业务逻辑

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
@RefreshScope @RestController @Api(tags = "API - 销售订单相关接口") public class SaleOrderFeignClient implements SaleOrderFeignApi { @Autowired private SaleOrderService saleOrderService; @Override public DataResp<SaleOrderVo> getSaleOrder(String orderNo) { //具体业务逻辑 return DataResp.ok(saleOrderVo); } }

4、fin  调用  api

复制代码
1
2
3
4
5
@Lazy @Autowired private SaleOrderFeignApi saleOrderFeignApi; DataResp<SaleOrderVo> saleOrderResp = saleOrderFeignApi.getSaleOrder(servOrderVo.getSaleNo());

 

最后

以上就是俊秀缘分最近收集整理的关于Spring Cloud feign实现服务间的调用的全部内容,更多相关Spring内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部