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

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

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

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

猜你喜欢

好运一分快三官方_一分快三登入_Ribbon整合Eureka组件,以实现负载均衡

1整体框架的说明   在本案例的框架里,亲戚亲戚朋友将配置一个Eureka服务器,搭建一个提供相同服务的Eureka服务提供者,一块儿在Eureka服务调用者里引入Ribbon

2020-01-18

分分飞艇可靠不_HPE宣布收购MapR,进一步提升智能数据平台能力

2019年8月5日,HPE公布收购MapR公司分分飞艇可靠不的业务资产,MapR是有另另一个 领先的人工智能和分析应用的分分飞艇可靠不数据平台,以横向扩展、多云、多协议文件

2020-01-18

1.5分pk10神彩_ 便秘吃什么?吃这5种食物最管用!

便秘真是还都能1.5分pk10神彩不能 算是哪几种严重的疾病,不过,便秘的人却非常痛苦。但是 便秘的因为分析,体内的毒素无法排解出去,对身体健康也是不利的。但是

2020-01-18

飞艇app下载安装_1.58万亿元!国庆消费“刷”出新高

中国银联8日发布2018年国庆黄金周银联网络交易数据。“十一”长假期间,银联网络交易总金额达到156万亿元,交易总笔数794亿笔,日均较去年国庆黄金周分别增长319%和245%

2020-01-18

秒速pk10新用户注册 _技术提升了,钱自然就来了:盘点这段时间我挣钱的感受

  2019年,我自认为本职和副业全部后会错,而且副业的收入能抵消掉工资里扣去的所得税以及缴纳的各种社保,不过似乎收入全部后会些靠近瓶颈了。经过和师傅的沟通,再结合我最近的切实

2020-01-18