博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
五.Hystrix请求缓存(request cache)
阅读量:5221 次
发布时间:2019-06-14

本文共 2843 字,大约阅读时间需要 9 分钟。

1.在一个请求执行之前,都必须先初始化一个request context

HystrixRequestContext context = HystrixRequestContext.initializeContext();

然后在请求结束之后,需要关闭request context

context.shutdown();

一般来说,在java web来的应用中,都是通过filter过滤器来实现的

filter:

/** * hystrix请求上下文过滤器 * @author 张三丰 * */public class HystrixRequestContextFilter implements Filter {    public void init(FilterConfig config) throws ServletException {            }        public void doFilter(ServletRequest request, ServletResponse response,            FilterChain chain) throws IOException, ServletException {        HystrixRequestContext context = HystrixRequestContext.initializeContext();        try {            chain.doFilter(request, response);         } catch (Exception e) {            e.printStackTrace();        } finally {            context.shutdown();        }    }    public void destroy() {            }}

command:

/** * 获取商品名称的command * @author 张三丰 * */public class GetProductNameCommand extends HystrixCommand
{ private Long productId; public GetProductNameCommand(Long productId) { super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("BrandInfoService")) .andCommandKey(HystrixCommandKey.Factory.asKey("GetproductNameCommand")) .andThreadPoolKey(HystrixThreadPoolKey.Factory.asKey("GetproductInfoPool")) .andThreadPoolPropertiesDefaults(HystrixThreadPoolProperties.Setter()//配置线程池 .withCoreSize(15) .withQueueSizeRejectionThreshold(10)) .andCommandPropertiesDefaults(HystrixCommandProperties.Setter()//配置信号量(这个参数设置了HystrixCommand.getFallback()最大允许的tomcat并发请求数量,默认值是10,也是通过semaphore信号量的机制去限流如果超出了这个最大值,那么直接被reject)
.withFallbackIsolationSemaphoreMaxConcurrentRequests(15))                );          this.productId = productId;    }        @Override    protected String run() throws Exception {        // 调用一个商品服务的接口(对于同一个请求,会被缓存,比如productId=100的商品请求两次,那么第二次会直接查缓存,不会进到这里)        // 如果调用失败了,报错了,那么就会去调用fallback降级机制        throw new Exception();    }      //抛出异常,走降级接口    @Override    protected String getFallback() {
     //从缓存拿数据,尽量别走网络,如果非得走网络,需要再次调用command System.out.println("从本地缓存获取商品数据,productId=" + productId); return "商品名称"; } //开启请求缓存 @Override protected String getCacheKey() { return "product_info_" + productId; }}

 

controller中:

@RequestMapping("/getProductInfos")    @ResponseBody    public String getProductInfos(Long productId) {
GetProductInfoCommand getProductInfoCommand = new GetProductInfoCommand(productId); ProductInfo productInfo = getProductInfoCommand.execute(); System.out.println(productInfo); System.out.println(getProductInfoCommand.isResponseFromCache()); return "success"; }

 

转载于:https://www.cnblogs.com/z-3FENG/p/9696289.html

你可能感兴趣的文章
最小度限制生成树模板
查看>>
树状数组总结
查看>>
3.shell编程-文件查找之find命令
查看>>
SQL语句使用时间和日期的函数
查看>>
SourceTree windows免注册免登陆使用方法
查看>>
Android Studio 快捷键和常用技巧汇总
查看>>
POJ 1195 Mobile phones(二维树状数组)
查看>>
团队报告
查看>>
GridView 72般绝技 (http://blog.csdn.net/21aspnet/)
查看>>
win7创建共享给windows和linux机器
查看>>
Window.open()方法参数详解
查看>>
Hadoop1 集群安装实验
查看>>
java RE Validation常用
查看>>
GNU make使用(一)
查看>>
How to change MAC address in windows 7
查看>>
log4net的各种Appender配置示例
查看>>
JointCode.Shuttle,一个简单高效的跨 AppDomain 通信的服务框架
查看>>
第二次绩效评估
查看>>
Java中 VO、 PO、DO、DTO、 BO、 QO、DAO、POJO的概念
查看>>
迅为iTOP-4412开发板-驱动-显卡支持HDMI_1080P分辨率
查看>>