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

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

    哪怕好几个 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查订单”的业务。

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

猜你喜欢

3分时时彩娱乐app_丰田完成对神户制钢产品检查 未发现质量问题

据英国路透社1月17日报道,丰田汽车公司在1月17日表示,不可能 完成了对神户制钢铝板制品的安全检查,检查报告显示丰田的车辆质量或性能并未受到影响,符合丰田标准。神户制钢在1

2019-10-15

秒速快3登录_安抚汽车制造商 特朗普政府欲放宽燃油经济性标准

美国特朗普政府正在考虑放宽原定的汽车燃油经济性标准,以安抚汽车制造商。不过,特朗普政府提出的“联邦温室乙炔气 及燃油经济性目标”的减排计划也将迎来“中期检查”。而为了达到你你

2019-10-15

大发pk10彩神争8_2018年6月移动视频市场:爱奇艺继续领跑视频用户活跃度 短视频崛起行业竞争格局生变

6月QuestMobile数据出炉大发pk10彩神争8,爱奇艺在用户规模与用户粘性等指标上继续保持移动视频行业第一的位置。短视频应用出現反超腾讯视频、优酷的趋势,腾讯视频的6月

2019-10-15

秒秒快3登录中心_2019Q1移动医疗报告:市场规模平稳增至63.9亿

国家城镇化发展秒秒快3登录中心不断推进,国内医疗资源分配不均,消费者健康医疗需求攀升等诸多因素,不断推秒秒快3登录中心动着移动医疗产业发展壮大。 第三方数据挖掘及市场研究机构比

2019-10-15

5分彩官方网站登录_乌镇"顶级饭局":中国互联网半壁江山到齐

12月3日晚,乌镇西栅景区51-52号民宿津驿客栈又变得异常热闹。趁着第四届世界互联网大会召开,网易董事局主席兼CEO丁磊、腾讯董事会主席兼CEO马化腾、百度董事长兼CEO李彦

2019-10-15