springCloud-服务治理-Hystrix
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文件
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.1.4.RELEASE
jane.spring.com
waiter-service
0.0.1-SNAPSHOT
waiter-service
Demo project for Spring Boot
1.8
Greenwich.SR1
org.springframework.boot
spring-boot-starter-cache
org.springframework.boot
spring-boot-starter-data-jpa
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-actuator
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
io.micrometer
micrometer-registry-prometheus
org.joda
joda-money
1.0.1
org.jadira.usertype
usertype.core
6.0.1.GA
com.fasterxml.jackson.datatype
jackson-datatype-hibernate5
2.9.8
org.apache.commons
commons-lang3
com.h3database
h3
runtime
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
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效果
启动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文件
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.1.4.RELEASE
jane.spring.com
customer-service
0.0.1-SNAPSHOT
customer-service
Demo project for Spring Boot
1.8
Greenwich.SR1
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-actuator
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
2.1.1.RELEASE
org.springframework.cloud
spring-cloud-starter-openfeign
io.github.openfeign
feign-httpclient
org.springframework.cloud
spring-cloud-starter-netflix-hystrix
org.joda
joda-money
1.0.1
org.apache.commons
commons-lang3
org.apache.httpcomponents
httpclient
4.5.7
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
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效果
启动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文件
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.1.4.RELEASE
jane.spring.cloud
hystrix-dashboard-demo
0.0.1-SNAPSHOT
hystrix-dashboard-demo
Demo project for Spring Boot
1.8
Greenwich.SR1
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-actuator
org.springframework.cloud
spring-cloud-starter-netflix-hystrix-dashboard
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
3、启动后效果如下
4、将地址输入上述文本框,并点击Monitor Stream按钮
http://127.0.0.1:8090/actuator/hystrix.stream
5、调用如下请求:
6、查看Hystrix-dashboard 效果
7、停止waiter-service服务,再次调用,可以看到错误
分享名称:springCloud-服务治理-Hystrix
网址分享:http://scyanting.com/article/pjpjed.html