SpringCloud微服务架构实战:Feign+Hystrix实现RPC调用保护

第一种方式具体的实现可以分为两步:第一步是实现Feign客户端远程调用接口,编写一个Fallback回退处理类,并将RPC失败后的回退逻辑编写在回退处理类对应的实现方法中;第二步是在Feign客户端接口的关键性注解@FeignClient上配置失败处理类,具体来说,将该注解的Fallback属性的值配置为上一步定义的Fallback回退处理类。

下面介绍具体的实例,演示如何定义和使用一个Fallback回退处理类。在crazy-springcloud脚手架的uaa-client模块中,有一个用于对uaa-provider进行RPC调用的Feign客户端远程调用接口UserClient,其目的是获取用户信息。

第一步为UserClient接口定义一个简单的Fallback回退处理实现类,代码如下:

package com.crazymaker.springcloud.user.info.remote.fallback;

//省略import

/**

*Feign客户端接口的Fallback回退处理类

*/

@Component

public class UserClientFallback implements UserClient

{

/**

*获取用户信息RPC失败后的回退方法

*/

@Override

public RestOut detail(Long id)

{

return RestOut.error(“failBack:user detail rest服务调用失败” );

}

}

第二步是在UserClient客户端接口的@FeignClient注解中,将Fallback属性的值配置为上一步定义的Fallback回退处理类UserClientFallback,代码如下:

package com.crazymaker.springcloud.user.info.remote.client;

//省略import

/**

*Feign客户端接口

*@description:获取用户信息的RPC接口类

*/

@FeignClient(value = “uaa-provider”,

configuration = FeignConfiguration.class,

fallback = UserClientFallback.class, #配置回退处理类 path = “/uaa-provider/api/user”)

public interface UserClient

{

@RequestMapping(value = “/detail/v1”, method = RequestMethod.GET)

RestOut detail(@RequestParam(value = “userId”) Long userId);

}

回退处理类的实现已经完成,如何进行验证呢?仍然使用前面定义的demoprovider的REST接口

/api/call/uaa/user/detail/v2,该接口通过UserClient对uaa-provider进行远程调用。具体的演示方式为:

停掉所有uaa-provider服务,然后在demo-provider的swagger-ui界面访问其REST接口

/api/call/uaa/user/detail/v2,该接口的内部代码会通过UserClient远程调用Feign接口对目标uaa-provider的REST接口/api/user/detail/v1发起FeignRPC远程调用,而uaa-provider全部服务处于宕机状态,因此Feign将会触发Hystrix回退,执行Fallback回退处理类UserClientFallback的回退实现方法,返回Fallback回退处理的内容,输出的内容如图2-17所示。

SpringCloud微服务架构实战:Feign+Hystrix实现RPC调用保护

图2-17 UserClientFallback回退处理类生效后的示意图

接下来看第二种方式,定义和使用一个Fallback回退处理工厂类。

第二种方式具体的实现也可以分为两步:第一步创建一个Fallback回退处理工厂类,该工厂类需要实现Hystrix的FallbackFactory回退工厂接口,实现其抽象的create创建方法,在该方法的实现代码中,需要返回一个Feign客户端接口的实现类,方法中的具体实现即为回退处理实例,可以通过匿名类的方式创建一个新的回退处理类,并在该匿名类的每个方法的实现代码中编写好RPC回退逻辑;第二步在Feign客户端接口的关键性注解@FeignClient上配置失败处理工厂类,将fallbackFactory属性的值配置为上一步定义的FallbackFactory回退处理工厂类。

下面介绍具体的实例,演示如何定义和使用一个Fall

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值