Spring cloud中使用 Hystrix
前言
Hystrix 在Spring Cloud中使用了Netflix开发的Hystrix来实现熔断器。可以稍微通过几个简单的代码示例,学习Hystrix
导入依赖
<!-- 整合hystrix -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
代码示例
开启熔断器
//开启熔断器
@EnableHystrix
@EnableDiscoveryClient
@SpringBootApplication
public class EurekaclientApplication {
/**
* 实例化RestTemplate,通过@LoadBalanced注解开启均衡负载能力.
* @return restTemplate
*/
@LoadBalanced
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(EurekaclientApplication.class, args);
}
}
业务实例代码
这里请求服务代码就不写了 可以查看 传送门
容错代码
@Service
public class UserService {
@Autowired
RestTemplate restTemplate;
//服务发现对象
@Autowired
DiscoveryClient discoveryClient;
@HystrixCommand(fallbackMethod = "fallback")
public User getUser(int id){
//user微服务的名字 用来想此服务发送请求
String servceId = "user-server";
String url = "http://" + servceId + "/getUser?id=" + id;
System.out.println(url + " = " + url);
User forObject = restTemplate.getForObject(url, User.class);
return forObject;
}
/**
* 使用@HystrixCommand注解指定当该方法发生异常时调用的方法
* @param id id
* @return 通过id查询到的用户
*/
public User fallback(int id) {
return new User(1,"test 用户 ","查询用户异常!","1");
}
}
controller 调用
@RestController
public class GetUserController {
@Autowired
private UserService userService;
@RequestMapping("get")
public User getUser(int id){
return userService.getUser(id);
}
}
实体类User
public class User {
private int id;
private String name;
private String sex;
private String count;
public User() {
}
public User(int id, String name, String sex, String count) {
this.id = id;
this.name = name;
this.sex = sex;
this.count = count;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getCount() {
return count;
}
public void setCount(String count) {
this.count = count;
}
}
可以看到异常容错