Spring Cloud微服务系列文,Hystrix与Eureka的整合

  • 时间:
  • 浏览:11
  • 来源:木木娱乐网_提供晓轩资源网技术_技术QQ网资讯

    当当让让我们 启动Eureka服务器(HystrixEurekaServer)、服务提供者(HystrixEurekaserviceProvider)和服务调用者(HystrixEurekaserviceCaller)三个小项目后,还可以 在浏览器里输入如下的请求,以此来查看合并请求的效果。

{"orderId":"1","orderOwner":"Peter"}

    在第6行里,当让让我们 定义了只查询三个小对象的getOneOrderDetail土最好的办法,在定义该土最好的办法的注解里,当让让我们 指定了会把在5秒内调用该土最好的办法的请求合并到getMoreOrderDetails土最好的办法里。

    上述请求的输出如下,当让让我们 能都看五个OrderDetail对象。从上述的讲解能看出,这五个对象真是是通过一次合并后的请求得到的。

    就让,通过第21到24行的代码,把三个小OrderDetail对象组装成三个小List<OrderDetail>类型的orderDetailList对象,并在第27行返回了orderDetailList对象。

     在上文的hystrixMergeDemo土最好的办法里,当让让我们 首先在第11行初始化Hystrix请求上下文,就让在第14到16行调用了三次getOneOrderDetail土最好的办法,并在第17到19行里,通过Furure类型对象的get土最好的办法,把三次调用的结果分别赋予三个小OrderDetail类型的对象。

    第一,在pom.xml里,通过如下关键代码引入Eureka服务器组件的依赖包。 

    第二,在application.yml里,指定了本项目的主机名和端口号,并指定了对外提供eureka服务的Url路径,代码如下。    

    注:本主次给出的是Eureka服务器省略版的代码,完整性代码当让让我们 还可以 参见另外一篇博文,架构师入门:搭建基本的Eureka架构(从项目里抽取)。    

    这里当让让我们 将在HystrixEurekaserviceCaller项目里,调用HystrixEurekaserviceProvider里定义的服务,在调用时,当让让我们 将合并5秒内发送的请求。

     在服务提供者的启动类ServiceProviderApp.java里,当让让我们 是通过加入@EnableCircuitBreaker注解来启动断路器,代码如下。     

    而在application.yml里,指定了本项目的服务端口是1111,对外提供的项目名是hystrixEureka,以及是向第一主次指定的Eureka服务器注册,代码如下。   

    但可能输入的是http://localhost:1111/getOrderDetailById/error,这么会在OrderDetailService类的getOrderDetailByID土最好的办法里抛出异常,从而走Hystrix的回退流程,由此会输入如下的话语。

    在第16行的getMoreOrderDetails土最好的办法里,当让让我们 是通过第21行到第25行的for循环,依次遍历待查询的orderId,并通过第23行的getForObject土最好的办法,调用服务提供者的getOrderDetailById土最好的办法,得到对应的OrderDetail对象,并添加到List<OrderDetail>类型的list对象中。最后,是通过第26行的代码,返回富含多次请求结果的list对象。

    第三,在ServerStarter.java里,编写启动Eureka服务的代码,这里请注意,在第2和第3行里,通过注解声明了本类是Eureka服务器的启动类。    

    步骤二,就让当让让我们 都看,在Controller类里,是调用OrderDetailService类的土最好的办法来查询多个订单,就让合并请求的代码是写在你你这些 类里的,当让让我们 来看下代码。    

    步骤一,在控制器类Controller.java里,初始化Hystrix请求上下文,并通过Future对象多次发送请求,代码如下。   

[{"orderId":"1","orderOwner":"Peter"},{"orderId":"2","orderOwner":"Tom"},{"orderId":"3","orderOwner":"Mike"}]

    这里真是当让让我们 是发出了三次调用请求,但从后文的讲解里,当让让我们 能都看这三次请求真是是被合并避免的。可能在合并请求时,Hystrix避免类会把请求暂处于Hystrix请求上下文里,就让这里当让让我们 一定得通过之类于第11行的代码初始化上下文,为什么在么在让将无法得到合并请求的结果。

    本文谢绝转载。其它和Spring Cloud相关的博文如下:

{"orderId":"error","orderOwner":"error"}

    在Controller.java你你这些 控制器类里,当让让我们 是在第9行里,通过调用service类提供的土最好的办法来返回具体的OrderDetail信息,代码如下。    

     在第13行的getOrderDetailByID土最好的办法就让,当让让我们 在第12行通过fallbackMethod定义了回退土最好的办法,在你你这些 土最好的办法的第16行里,当让让我们 定义了可能输入是error,这么则将抛出异常,以此触发回退土最好的办法getFallback。而在第24行定义的回退土最好的办法里,当让让我们 将返回三个小ID和Owner完整性全是error的OrderDetail对象。本类用到的OrderDetail模型类定义如下。    

    和Ribbon等组件一样,在项目中,Hystrix一般不要单独冒出,就让会和Eureka等组件配套冒出。在Hystrix和Eureka整合后的框架里,一般会用到Hystrix的断路器以及合并请求等形态,而在Web框架里,大多会有专门的缓存组件,就让不为什么在会用到Hystrix的缓存形态。

    在OrderDetailService.java里,当让让我们 用HashMap你你这些 数据形态来模拟数据库,以此来模拟从数据库读OrderDetail的土最好的办法,提供了“根据ID找相应对象的服务”,代码如下。    

    HystrixEurekaServer项目承担着Eureka服务器的作用,这主次的代码关键点如下。

http://localhost:500500/mergeDemo

    在pom.xml里,当让让我们 除了指定Eureka的依赖包以外,还了指定了Hystrix的依赖包,关键代码如下。其中,前4行指定的是Eureka的依赖包,后4行指定的是Hystrix的依赖包。    

    在你你这些 案例中,当让让我们 是在“提供者服务”的模块引入hytrix断路器,而完整性全是在“服务调用”模块,这和项目中的常规做法相符,可能启动断路器的场景一般是“提供服务模块的流量超载”。    

    至此当让让我们 完成了开发工作,启动HystrixEurekaServer和HystrixEurekaserviceProvider后,可能在浏览器中输入http://localhost:1111/getOrderDetailById/1,能都看如下的输出,这说明走的是正常的流程。