1.ribbon加上hystrix
1.导依赖
<dependency>
? ?<groupId>org.springframework.cloud</groupId>
? ?<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
2 配置类开启hystrix
@SpringBootApplication
@EnableEurekaClient
@EnableCircuitBreaker //开启Hystrix熔断
public class OrderApplication {
?
? ?public static void main(String[] args) {
? ? ? ?SpringApplication.run(OrderApplication.class,args);
? }
?
? ?//在bean里注入restTemplate,也可以直接在controller里面new一个也行
? ?@Bean
? ?@LoadBalanced
? ?public RestTemplate restTemplate(){
? ? ? ?return new RestTemplate();
? }
?
? ?//负载均衡算法
? ?@Bean
? ?public RandomRule randomRule(){
? ? ? ?return new RandomRule();
? }
?
}
?
3.controller里面的方法加上注解
@RestController
public class OrderController {
?
? ?@Autowired
? ?private RestTemplate restTemplate;
?
? ?//使用了负载均衡过后就只能用端口名,而不能使用端口号(ribbon包加上启动类那里的loadbalance注解)
?
? ?@HystrixCommand(fallbackMethod = "fallbackMethod") ? //方法熔断
? ?@GetMapping("getUser/{id}")
? ?public User getUser(@PathVariable("id") Long userId){
? ? ? ?//应该发请求到user的controller 拿到用户的信息
// ? ? ? User user = restTemplate.getForObject("http://localhost:10020/getUserById/" + userId, User.class);
? ? ? ?// User user = restTemplate.getForObject("http://user-server/getUserById/" + userId, User.class);return user;
? ? ? ?User user = restTemplate.getForObject("http://user-server/getUserById/" + userId, User.class);
? ? ? ?return user;
?
?
? }
?
? ?public User fallbackMethod(@PathVariable("id") Long userId){
?
? ? ? ?return new User(120L,"急救科","准备入土");
?
? }
?
?
?
?
?
}
二。 openFeign加上hystrix
1.导入依赖
<dependency>
? ?<groupId>org.springframework.cloud</groupId>
? ?<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
2.在yml里面添加这一句开启熔断支持
feign:
hystrix:
? enabled: true #开启熔断支持
3.启动类加上注解,并写出相应的类
@FeignClient(name = "user-server",fallbackFactory = UserFeignFallbackFactory.class)
public interface UserFeign { ? ?//下面的方法直接去controller里面拷贝过来,再把方法体删了就ok
@GetMapping("/getUserById/{id}") ?
public User getUserById(@PathVariable(value = "id") Long userId);}
//工厂方式的 , 托底类
@Component
public class UserFeignFallbackFactory implements FallbackFactory<UserFeign> {
?
? ?//拖地方法 : throwable,异常
? ?@Override
? ?public UserFeign create(Throwable throwable) {
? ? ?//返回UserFeignClient 接口的实例
? ? ? ?return new UserFeign() {
? ? ? ? ? ?@Override
? ? ? ? ? ?public User getUserById(Long userId) {
? ? ? ? ? ? ? ?//把异常信息打印到控制台
? ? ? ? ? ? ? ?throwable.printStackTrace();
?
? ? ? ? ? ? ? ?//真正拖地方法 , 这里的数据是托底数据
? ? ? ? ? ? ? ?return new User(-1L,"无此用户","用户服务不可用");
? ? ? ? ? }
? ? ? };
? }
}
zzui就留着后面放假再总结吧
|