SpringCloud项目集成Feign、Hystrix过程解析
这篇文章主要介绍了SpringCloud项目集成Feign、Hystrix过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
Feign的功能:这是个消费者,根据服务注册在Eureka的ID去找到该服务,并调用接口
Hystrix的功能:熔断器,假如A服务需要调用B服务的/cities接口获取数据,那就在A服务的controller里声明@HystrixCommand,如果B服务的/cities接口挂了,就返回一个自定义的值
项目结构
[root@node01cloud]#treeweather/ weather/ ├──Application.java#主程序启动入口 ├──controller │├──CityController.java#控制路由,比如访问127.0.0.1:8080/cities,这里调用cityClient方法 └──service └──CityClient.java#具体方法的实现,这里就具体实现cityClient方法(interface)
Application.java
packagecom.waylau.spring.cloud.weather; importorg.springframework.boot.SpringApplication; importorg.springframework.boot.autoconfigure.SpringBootApplication; importorg.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;#引入熔断器 importorg.springframework.cloud.client.discovery.EnableDiscoveryClient;#让eureka能发现自己 importorg.springframework.cloud.netflix.feign.EnableFeignClients;#引入feign @SpringBootApplication @EnableDiscoveryClient @EnableFeignClients#声明这个程序引入FeignClient @EnableCircuitBreaker#声明这个程序引入熔断器 publicclassApplication{ publicstaticvoidmain(String[]args){ SpringApplication.run(Application.class,args); } }
controller/CityController.java
packagecom.waylau.spring.cloud.weather.controller; importorg.springframework.beans.factory.annotation.Autowired; importorg.springframework.web.bind.annotation.GetMapping; importorg.springframework.web.bind.annotation.RestController; importcom.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; importcom.waylau.spring.cloud.weather.service.CityClient;#引用service/CityClient.java @RestController publicclassCityController{ @Autowired privateCityClientcityClient; @GetMapping("/cities")#控制路由,比如访问127.0.0.1:8080/cities @HystrixCommand(fallbackMethod="defaultCities")#给另外一个服务设置hystrix熔断器,并声明fallbackMethod(回调方法)假如另外一个服务挂了,就调用defaultCities方法 publicStringlistCity(){ //通过Feign客户端来查找 Stringbody=cityClient.listCity();#调用service里CityClient.java的cityClient方法,获取城市数据 returnbody;#返回,访问127.0.0.1:8080/cities就能返回城市数据 } publicStringdefaultCities(){ return"CityDataServerisdown!"; } }
service/CityClient.java(消费者)
用Feign去另一个接口获取数据
packagecom.waylau.spring.cloud.weather.service; importorg.springframework.cloud.netflix.feign.FeignClient; importorg.springframework.web.bind.annotation.GetMapping; @FeignClient("msa-weather-city")#msa-weather-city是msa-weather-city服务注册到eureka的ID,通过这个ID就能访问到msa-weather-city微服务 publicinterfaceCityClient{ @GetMapping("/cities")#调用msa-weather-city微服务里的/cities接口 StringlistCity();#调用msa-weather-city微服务里的/cities接口里的listCity()方法 }
application.properties
spring.application.name:micro-weather-eureka-client-feign-hystrix eureka.client.serviceUrl.defaultZone:http://localhost:8761/eureka/ feign.client.config.feignName.connectTimeout:5000 feign.client.config.feignName.readTimeout:5000
测试,条件为另一个服务可用时,我们是能调用的
测试.条件为另一个服务不可以时,我们是不能调用的,所以fallback
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。