1 spring cloud整合Hystrix
Hystrix主要用來保護(hù)調(diào)用者這一方的服務(wù)景东,所以Eureka服務(wù)器和服務(wù)提供的代碼和第一篇文章中相同屏积,只需要修改服務(wù)調(diào)用者的代碼即可冈在。
創(chuàng)建一個(gè)spring boot項(xiàng)目用于服務(wù)調(diào)用空闲,pom文件中增加Hystrix依賴如下:
<dependency
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
在啟動(dòng)類上卿操,加入熔斷器的注解@EnableCircuitBreaker
@SpringBootApplication
@EnableEurekaClient
@EnableCircuitBreaker
public class ConSumerApp {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
new SpringApplicationBuilder(ConSumerApp.class)
.web(true).run(args);
}
}
創(chuàng)建一個(gè)服務(wù)類叔汁,用于編寫Hystrix命令。使用注解@HystrixCommand表明getMember方法是一個(gè)Hystrix命令
- fallbackMethod參數(shù)指名回退方法乘碑;
- commandProperties參數(shù)用來配置命令挖息,本例中配置超時(shí)時(shí)間為1秒;
- threadPoolProperties參數(shù)用來配置線程池,本例中配置線程池并發(fā)數(shù)為2兽肤。
@Service
//@DefaultProperties(defaultFallback = "getMemberFallback")
public class MemberService {
@Autowired
private RestTemplate restTpl;
@HystrixCommand(fallbackMethod = "getMemberFallback",
commandProperties = {
@HystrixProperty(name = "execution.isolation
.thread.timeoutInMilliseconds", value = "1000")
}, threadPoolProperties = {
@HystrixProperty(name = "coreSize", value = "2")
})
public Member getMember(Integer id) {
try {
Thread.sleep(2000);
} catch (Exception e) {
}
Member member = restTpl.getForObject(
"http://spring-hy-member/member/{id}", Member.class, id);
return member;
}
public Member getMemberFallback(Integer id) {
Member m = new Member();
m.setId(1);
m.setName("error member");
return m;
}
}
下面編寫測試類套腹,由于設(shè)置超時(shí)時(shí)間為1秒,故會(huì)執(zhí)行回退方法资铡。
@RestController
public class TestController {
@Autowired
private MemberService memberService;
@RequestMapping(value = "/router", method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE)
public Member router() {
return memberService.getMember(1);
}
}
2 Hystrix 監(jiān)控
為服務(wù)調(diào)用者加入Actuator依賴电禀,可以對(duì)服務(wù)調(diào)用者的健康情況進(jìn)行實(shí)時(shí)監(jiān)控。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>1.5.3.RELEASE</version>
</dependency>
然后新建一個(gè)監(jiān)控spring boot項(xiàng)目笤休,pom文件內(nèi)容如下:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>1.5.3.RELEASE</version>
</dependency>
</dependencies>
啟動(dòng)類代碼如下:
@SpringBootApplication
@EnableHystrixDashboard
public class DashboardApp {
public static void main(String[] args) {
new SpringApplicationBuilder(DashboardApp.class).properties("server.port=8082").run(args);
}
}
訪問項(xiàng)目地址:http://localhost:8082/hystrix尖飞,顯示監(jiān)控頁面
輸入要監(jiān)控的項(xiàng)目地址:http://localhost:8081/hystrix.stream,能夠看到該項(xiàng)目的命令調(diào)用情況。
第一排Circuit為熔斷器使用情況政基;第二排為線程池使用情況贞铣。