温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

springCloud-服务治理-Hystrix

发布时间:2020-07-19 13:34:02 来源:网络 阅读:340 作者:shayang88 栏目:编程语言

Hystrix作为一款服务治理框架,被使用的很多,但是官方已经不再维护,取而代之的是Resilience4j框架。

所以本文简单介绍Hystrix的使用,把重点放在下一篇的Resilience4j的讲解上。

案例

1、Eureka服务注册和发现
2、一个服务提供者waiter-service
3、基于Feign实现的调用者customer-service,调用waiter-service的方法,服务治理在customer-service上使用。
4、Hsytrix dashboard 用于监控服务调用情况。

步骤

启动watier-service,并注册uereka

1、启动文件:

 import com.fasterxml.jackson.datatype.hibernate5.Hibernate5Module; import java.util.TimeZone; @SpringBootApplication @EnableJpaRepositories @EnableCaching @EnableDiscoveryClient public class WaiterServiceApplication implements WebMvcConfigurer { public static void main(String[] args) { SpringApplication.run(WaiterServiceApplication.class, args); } } 

2、POM文件

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>jane.spring.com</groupId> <artifactId>waiter-service</artifactId> <version>0.0.1-SNAPSHOT</version> <name>waiter-service</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>Greenwich.SR1</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency> <dependency> <groupId>org.joda</groupId> <artifactId>joda-money</artifactId> <version>1.0.1</version> </dependency> <dependency> <groupId>org.jadira.usertype</groupId> <artifactId>usertype.core</artifactId> <version>6.0.1.GA</version> </dependency> <!-- 增加Jackson的Hibernate类型支持 --> <dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-hibernate5</artifactId> <version>2.9.8</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> </dependency> <dependency> <groupId>com.h3database</groupId> <artifactId>h3</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> 

3、配置文件:

spring.application.name=waiter-service management.endpoints.web.exposure.include=* management.endpoint.health.show-details=always info.app.author=DigitalSonic info.app.encoding=@project.build.sourceEncoding@ eureka.client.service-url.defaultZone=http://127.0.0.1:8761/eureka/ server.port=8091

4、方法文件

 import java.util.ArrayList; import java.util.List; @RestController @RequestMapping("/coffee") @Slf4j public class CoffeeController { @Autowired private CoffeeService coffeeService; @GetMapping("/{id}") public Coffee getById(@PathVariable Long id) { Coffee coffee = coffeeService.getCoffee(id); log.info("Coffee {}:", coffee); return coffee; } } 

5、启动后Eureka效果
springCloud-服务治理-Hystrix

启动customer-service服务

1、启动文件

 import lombok.extern.slf4j.Slf4j; import java.util.concurrent.TimeUnit; @SpringBootApplication @Slf4j @EnableDiscoveryClient @EnableFeignClients @EnableCircuitBreaker public class CustomerServiceApplication { public static void main(String[] args) { SpringApplication.run(CustomerServiceApplication.class, args); } @Bean public CloseableHttpClient httpClient() { return HttpClients.custom() .setConnectionTimeToLive(30, TimeUnit.SECONDS) .evictIdleConnections(30, TimeUnit.SECONDS) .setMaxConnTotal(200) .setMaxConnPerRoute(20) .disableAutomaticRetries() .setKeepAliveStrategy(new CustomConnectionKeepAliveStrategy()) .build(); } } 

2、pom文件

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>jane.spring.com</groupId> <artifactId>customer-service</artifactId> <version>0.0.1-SNAPSHOT</version> <name>customer-service</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>Greenwich.SR1</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> <version>2.1.1.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-httpclient</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency> <dependency> <groupId>org.joda</groupId> <artifactId>joda-money</artifactId> <version>1.0.1</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.7</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> 

3、配置文件

server.port=8090 spring.application.name=customer-service management.endpoints.web.exposure.include=* management.endpoint.health.show-details=always feign.client.config.default.connect-timeout=500 feign.client.config.default.read-timeout=500 feign.hystrix.enabled=true eureka.client.service-url.defaultZone=http://127.0.0.1:8761/eureka/ 

4、控制器url

 import java.util.Arrays; import java.util.List; @RestController @RequestMapping("/customer") @Slf4j public class CustomerController { @Autowired private CoffeeService coffeeService; @GetMapping("/coffee") @HystrixCommand(fallbackMethod = "fallbackMethod") public Coffee getCoffee() { Coffee list = coffeeService.getById(1l); log.info("Read coffee: {} coffee", list); return list; } public Coffee fallbackMethod() { log.warn("Fallback ......"); return null; } } 

5、fegin客户端

 import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestParam; import java.util.List; @FeignClient(name = "waiter-service", contextId = "coffee", qualifier = "coffeeService", path="/coffee", fallback = FallbackCoffeeService.class) // 如果用了Fallback,不要在接口上加@RequestMapping,path可以用在这里 public interface CoffeeService { @GetMapping("/{id}") Coffee getById(@PathVariable Long id); } 

6、运行后,eureka效果
springCloud-服务治理-Hystrix

启动Hystrix-dashboard

1、启动文件:

 import com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsStreamServlet; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard; import org.springframework.context.annotation.Bean; @SpringBootApplication @EnableHystrixDashboard public class HystrixDashboardDemoApplication { public static void main(String[] args) { SpringApplication.run(HystrixDashboardDemoApplication.class, args); } @Bean public ServletRegistrationBean ServletRegistrationBeangetServlet() { HystrixMetricsStreamServlet streamServlet =new HystrixMetricsStreamServlet(); ServletRegistrationBean registrationBean =new ServletRegistrationBean(streamServlet); registrationBean.setLoadOnStartup(1); registrationBean.addUrlMappings("/hystrix.stream"); registrationBean.setName("HystrixMetricsStreamServlet"); return registrationBean; } } 

2、配置文件

server.port=9090

3、pom文件

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>jane.spring.cloud</groupId> <artifactId>hystrix-dashboard-demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>hystrix-dashboard-demo</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>Greenwich.SR1</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> 

3、启动后效果如下
springCloud-服务治理-Hystrix

4、将地址输入上述文本框,并点击Monitor Stream按钮

http://127.0.0.1:8090/actuator/hystrix.stream

5、调用如下请求:
springCloud-服务治理-Hystrix

6、查看Hystrix-dashboard 效果
springCloud-服务治理-Hystrix

7、停止waiter-service服务,再次调用,可以看到错误
springCloud-服务治理-Hystrix

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI