Spring Cloud学习笔记23——如何集成 Hystrix

Hystrix会监控微服务的调用状况,失败调用达到一定阀值时,会启用熔断机制

开发环境

  • JDK8+
  • Gradle4+
  • Spring Boot 2.0.0.M3
  • Spring Cloud Starter Netflix Eureka Client Finchley.M2
  • Spring Cloud Starter OpenFeign Finchley.M2
  • Spring Cloud Starter Netflix Hystrix Finchley.M2

创建项目

以之前的micro-weather-eureka-client-feign为蓝本,创建micro-weather-eureka-client-feign-hystrix项目
在这里插入图片描述

修改源码

修改build.gradle配置,添加Hystrix依赖:

//依赖关系
dependencies {

    //Eureka Client
    compile('org.springframework.cloud:spring-cloud-starter-netflix-eureka-client')

    //Feign
    compile('org.springframework.cloud:spring-cloud-starter-openfeign:2.0.0.M3')

    //Hystrix
    compile('org.springframework.cloud:spring-cloud-starter-netflix-hystrix')

    //该依赖用于测试阶段
    testCompile('org.springframework.boot:spring-boot-starter-test')
}

修改com.study.spring.cloud.weather包下的Application类,加入@EnableCircuitBreaker注解:

package com.study.spring.cloud.weather;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;

/*
 * @SpringBootApplication注解声明Spring Boot应用
 * 作用等同于@Configuration, @EnableAutoConfiguration, @ComponentScan,
 * 简化Spring配置
*/
@SpringBootApplication
//启用可发现的客户端
@EnableDiscoveryClient
//启用Feign
@EnableFeignClients
//启用Hystrix
@EnableCircuitBreaker
//Application类一定要处于整个工程的根目录下,这样它才能根据配置去扫描子节点下的Spring的Bean
public class Application {

	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}
}

修改com.study.spring.cloud.weather.controller包下的CityController类:

package com.study.spring.cloud.weather.controller;

import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.study.spring.cloud.weather.service.CityClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

//用于处理rest请求的controller
@RestController
public class CityController {

	@Autowired
	private CityClient cityClient;

	@GetMapping("/cities")
	//启用断路器
	@HystrixCommand(fallbackMethod = "defaultCities")
	public String listCity() {
		//通过Feign客户端来查找
		String body=cityClient.listCity();
		return body;
	}

	public String defaultCities(){
		return "City Data Server is down!";
	}
	
}

修改application.properties配置文件:

#应用名称
spring.application.name=micro-weather-eureka-client-feign-hystrix

#注册服务器的URL
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

#请求服务时的超时时间
feign.client.config.feignName.connect-timeout=5000

#读数据时的超时时间
feign.client.config.feignName.read-timeout=5000

运行

先在IDE上运行micro-weather-eureka-server

再通过命令行指定端口(如8085)运行msa-weather-city-eureka

最后在IDE上运行micro-weather-eureka-client-feign-hystrix

访问http://localhost:8080/cities页面:
在这里插入图片描述

msa-weather-city-eureka断掉,再刷新http://localhost:8080/cities页面:
在这里插入图片描述

扫描二维码关注公众号,回复: 4090311 查看本文章

猜你喜欢

转载自blog.csdn.net/qq_43415405/article/details/84072129