架构师系列文:通过Spring Cloud组件Hystrix合并请求

  • 时间:
  • 浏览:24
  • 来源:淤青的博客 - 专注共享松果娱乐网资源

    哪怕好几个 URL请求调用的功能再简单,Web应用服务都相当于会开启好几个 守护进程来提供服务,换句话说,有效降低URL请求数能很大程度上降低系统的负载。通过Hystrix提供的“合并请求”机制,我们都都 能有效地降低请求数量。

     当时人以后写的和本文有关的Spring Cloud其它相关文章。

  Hystrix针对不可用服务的保护机制以及引入缓存

    在第52行的run法律法律依据里,我们都都 通过第55行的for循环,依次遍历requests对象,并组装蕴含请求参数集合的orderIds对象,以后在第58行里,通过getOrdersFromDB法律法律依据,根据List类型的orderIds参数,模拟地从数据库里读取数据。        

    第74行定义的HystrixMergeDemo类里蕴含着main法律法律依据,在第77行里,我们都都 设置了合并请求的窗口时间是2秒,在第81到83行,创建了八个合并正确处理器对象,从第85到87行,我们都都 是通过queue 法律法律依据,以异步的法律法律依据启动了好几个 正确处理器,并在第89到91行里,输出了好几个 正确处理器返回的结果。五种守护进程的运行结果如下。     

    这里说明下,肯能在OrderHystrixCollapser内第16行的getRequestArgument法律法律依据里,我们都都 指定了查询参数名是orderId,不要 createCommand法律法律依据的requests参数,会用orderId来设置查询请求,一同,MergerCommand类中的相关法律法律依据也会用该对象来查询OrderDetail信息。

    步骤四,在OrderHystrixCollapser类的mapResponseToRequests法律法律依据里,通过for循环,把多次请求的结果组装进去requests对象中。肯能requests对象是Collection<CollapsedRequest<OrderDetail, String>>类型的,其中用String类型的OrderId关联到了好几个 OrderDetail对象,不要 这里会把合并查询的结果再拆散给3次请求,具体而言,会把八个OrderDetail对象对应地返回给第85行到第87行通过queue调用的八个请求。

    在第19行里,我们都都 指定了是根据String类型的OrderId参数来请求OrderDetail对象,在第22行的createCommand法律法律依据里,我们都都 指定了是调用MergerCommand法律法律依据来请求多个OrderDetail,在第26行的mapResponseToRequests法律法律依据里,我们都都 是用第28行的for循环,依次把batchResponse对象中蕴含的多个的查询结果设置到request对象里,肯能request是参数requests里的元素,不要 执行完第28行的for循环后,requests对象就能关联到合并后的查询结果。    

    在第12行,我们都都 定义了合并订单的正确处理器OrderHystrixCollapser类, 它继承(extends)了HystrixCollapser<Map<String, OrderDetail>, OrderDetail, String>类,而HystrixCollapser泛型中蕴含了八个参数,其中第好几个 参数Map<String, OrderDetail>表示该合并正确处理器合并请求后返回的结果类型,第八个参数表示是合并OrderDetail类型的对象,第好几个 参数则表示是根据String类型的请求参数来合并对象。

 通过案例了解Hystrix的各种基本使用法律法律依据 

    步骤二,肯能在createCommand法律法律依据里,调用了MergerCommand类的构造函数,不要 会触发该类第52行的run法律法律依据,在五种法律法律依据里,通过第55行和第56行的for循环,把request请求中蕴含的多个Argument(以后要 我OrderId)中放去到orderIds五种List类型的对象中,以后通过第58行的getOrdersFromDB法律法律依据,根据那些orderIds去找对应的OrderDetail对象。

    这里请注意,我我觉得通过合并请求的正确处理法律法律依据能降低URL请求的数量,但肯能合并后的URL请求数不要 ,会撑爆掉合并正确处理器(这里是OrderHystrixCollapser类)的缓存。比如在某项 目里,我我觉得只设置了合并5秒内的请求,但正好赶上秒杀活动,在五种窗口期内的请求数过万,那末都有肯能出现象。

   步骤三,在getORdersFromDB法律法律依据里,找到对应的多个OrderDetail对象,并组装成Map<String, OrderDetail>类型的result对象返回,但会 按调用链的关系,层层返回给OrderHystrixCollapser类。

     我我觉得在main法律法律依据里,我们都都 发起了3次调用,但肯能那些调用是指在在2秒内的,不要 会被合并正确处理,下面我们都都 结合上述针对类和法律法律依据的说明,归纳下合并正确处理八个请求的流程。

    在如下的HystrixMergeDemo.java里,我们都都 将分类分类整理2秒内到达的所有“查询订单”的请求,并把它们合并到好几个 对象中传输给后台,后台则是根据多个请求参数统一返回查询结果,五种基于合并的做法将比每次只正确处理好几个 请求的法律法律依据要高效得多,代码比较长,我们都都 按类来说明。    

    在第2行,我们都都 定义了OrderDetail类,这里,我们都都 将合并针对该类对象的请求。

    在MergerCommand类的第38到44行里,我们都都 用了orderDB对象来模拟数据库里存储的订单数据。在第46行的构造函数里,我们都都 用传入的requests对象来构建本类里的同名对象,在五种传入的requests对象里,肯能蕴含了合并后的请求。

    在前文里,我们都都 讲述了通过Hystrix进行容错正确处理的法律法律依据,这里我们都都 将讲述通过Hystrix合并请求的法律法律依据

    步骤一,在代码的81到83行里,我们都都 是通过OrderHystrixCollapser类型的collapser1等好几个 对象来传入待合并正确处理的请求,OrderHystrixCollapser类会通过第16行的构造函数,分别接收好几个 对象传入的orderId参数,并通过第22行的createCommand法律法律依据,调用MergerCommand类的法律法律依据执行“根据订单Id查订单”的业务。

    不要 一般会在上线前,先通过测试选用合并正确处理器的缓存容量,以后再预估下平均每秒的肯能访问数,但会 再据此设置合并的窗口时间。

猜你喜欢

幸运pk10app开户 _戛纳红毯倪妮完胜 肤白貌美秒杀刘亦菲巩俐

来源: 新浪网 2016-05-1516:10:47   导语:戛纳红毯将会落下了帷幕,却说 华人女星却留下了她们的

2019-08-18

幸运快3辅助_荣耀智慧屏发布,华为终端云服务将开启智慧生活新场景

8月10日,全球首款采用幸运快3辅助华为鸿蒙OS的产品荣耀知慧屏在东莞正式发布!作为华为知慧屏战略的第一款产品,这意味着华为全场景知慧生活战略又迈出重要一步幸运快3辅助。随着荣

2019-08-18

好运三分快3网址_我为能准时下班而做的准备,以及由此的收获,同时总结下不足

  可能性越来越人会说,做IT的想准时下班越来越,尤其是在互联网公司。某些外企或国企倒能准时下班,导致 是公司更像养老院。  虽然这里位于个误区:可能够够准时下班虽然和工

2019-08-18

秒速时时彩登录_吉林松原地震灾区:保障受灾群众生活 启动鉴定受损房屋

肉丝炒黄豆芽、土豆炖白菜、米饭——29日,吉林松原地震震中宁江区毛都站镇牙木吐村受灾群众刘连臣吃着热热乎乎的早餐对记者说,“包保干部一早就送来了,我和老伴一人一份。”刘连臣的房

2019-08-18

大发1.5分彩规则_World's top 10 largest public companies

Atotalof309compan大发1.5分彩规则i大发1.5分彩规则esfromtheChinesemainlandandHongKongwerelistedinForbe

2019-08-18